Path: blob/master/test/jdk/java/beans/Introspector/BeanPropertyTest.java
41149 views
/*1* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223import java.beans.BeanInfo;24import java.beans.BeanProperty;25import java.beans.IntrospectionException;26import java.beans.Introspector;27import java.beans.PropertyChangeListener;28import java.beans.PropertyDescriptor;2930import java.util.Arrays;313233/**34* @test35* @bug 8132703 8132163 8132732 8132973 8154756 8132888 815510336* @summary Some check for BeanProperty annotation37* @author a.stepanov38* @run main BeanPropertyTest39*/40public class BeanPropertyTest {4142private final static String DESCRIPTION = "TEST";43private final static boolean BOUND = true;44private final static boolean EXPERT = false;45private final static boolean HIDDEN = true;46private final static boolean PREFERRED = false;47private final static boolean REQUIRED = true;48private final static boolean UPDATE = false;49private final static String50V_NAME = "javax.swing.SwingConstants.TOP",51V_SHORT = "TOP",52V = Integer.toString(javax.swing.SwingConstants.TOP);53private final static int X = javax.swing.SwingConstants.TOP;5455private final static String DESCRIPTION_2 = "XYZ";565758// ---------- test cases ----------5960public static class G01 {6162private final static String TESTCASE = "arbitrary getter name";6364private final int x = X;6566@BeanProperty(67description = DESCRIPTION,68bound = BOUND,69expert = EXPERT,70hidden = HIDDEN,71preferred = PREFERRED,72required = REQUIRED,73visualUpdate = UPDATE,74enumerationValues = {V_NAME})75public int get1() { return x; }7677public void addPropertyChangeListener(PropertyChangeListener l) {}78public void removePropertyChangeListener(PropertyChangeListener l) {}79}8081public static class S01 {8283private final static String TESTCASE = "arbitrary setter name";8485private int x;8687@BeanProperty(88description = DESCRIPTION,89bound = BOUND,90expert = EXPERT,91hidden = HIDDEN,92preferred = PREFERRED,93required = REQUIRED,94visualUpdate = UPDATE,95enumerationValues = {V_NAME})96public void setXXXXX(int v) { x = v; }9798public void addPropertyChangeListener(PropertyChangeListener l) {}99public void removePropertyChangeListener(PropertyChangeListener l) {}100}101102// JDK-8132703103public static class G02 {104105private final static String TESTCASE = "arbitrary getter name";106107private final int x = X;108109@BeanProperty(110description = DESCRIPTION,111bound = BOUND,112expert = EXPERT,113hidden = HIDDEN,114preferred = PREFERRED,115required = REQUIRED,116visualUpdate = UPDATE,117enumerationValues = {V_NAME})118public int get() { return x; }119120public void addPropertyChangeListener(PropertyChangeListener l) {}121public void removePropertyChangeListener(PropertyChangeListener l) {}122}123124// JDK-8132703125public static class S02 {126127private final static String TESTCASE = "arbitrary setter name";128129private int x;130131@BeanProperty(132description = DESCRIPTION,133bound = BOUND,134expert = EXPERT,135hidden = HIDDEN,136preferred = PREFERRED,137required = REQUIRED,138visualUpdate = UPDATE,139enumerationValues = {V_NAME})140public void set(int v) { x = v; }141142public void addPropertyChangeListener(PropertyChangeListener l) {}143public void removePropertyChangeListener(PropertyChangeListener l) {}144}145146// JDK-8132703147public static class G03 {148149private final static String TESTCASE = "arbitrary getter name";150151private final int x = X;152153@BeanProperty(154description = DESCRIPTION,155bound = BOUND,156expert = EXPERT,157hidden = HIDDEN,158preferred = PREFERRED,159required = REQUIRED,160visualUpdate = UPDATE,161enumerationValues = {V_NAME})162public int GetX() { return x; }163164public void addPropertyChangeListener(PropertyChangeListener l) {}165public void removePropertyChangeListener(PropertyChangeListener l) {}166}167168// JDK-8132703169public static class S03 {170171private final static String TESTCASE = "arbitrary setter name";172173private int x;174175@BeanProperty(176description = DESCRIPTION,177bound = BOUND,178expert = EXPERT,179hidden = HIDDEN,180preferred = PREFERRED,181required = REQUIRED,182visualUpdate = UPDATE,183enumerationValues = {V_NAME})184public void SetX(int v) { x = v; }185186public void addPropertyChangeListener(PropertyChangeListener l) {}187public void removePropertyChangeListener(PropertyChangeListener l) {}188}189190// JDK-8132163191public static class G04 {192193private final static String TESTCASE = "arbitrary getter return type";194195private final int x = X;196197@BeanProperty(198description = DESCRIPTION,199bound = BOUND,200expert = EXPERT,201hidden = HIDDEN,202preferred = PREFERRED,203required = REQUIRED,204visualUpdate = UPDATE,205enumerationValues = {V_NAME})206public Object getX() { return x; }207208public void addPropertyChangeListener(PropertyChangeListener l) {}209public void removePropertyChangeListener(PropertyChangeListener l) {}210}211212// JDK-8132163213public static class S04 {214215private final static String TESTCASE = "arbitrary setter argument type";216217private int x;218219@BeanProperty(220description = DESCRIPTION,221bound = BOUND,222expert = EXPERT,223hidden = HIDDEN,224preferred = PREFERRED,225required = REQUIRED,226visualUpdate = UPDATE,227enumerationValues = {V_NAME})228public void setX(short v) { x = v; }229230public void addPropertyChangeListener(PropertyChangeListener l) {}231public void removePropertyChangeListener(PropertyChangeListener l) {}232}233234public static class G05 {235236private final static String TESTCASE =237"annotated getter + arbitrary setter argument type";238239private int x;240241@BeanProperty(242description = DESCRIPTION,243bound = BOUND,244expert = EXPERT,245hidden = HIDDEN,246preferred = PREFERRED,247required = REQUIRED,248visualUpdate = UPDATE,249enumerationValues = {V_NAME})250public int getX() { return x; }251public void setX(short v) { x = v; }252253254public void addPropertyChangeListener(PropertyChangeListener l) {}255public void removePropertyChangeListener(PropertyChangeListener l) {}256}257258// JDK-8132163259public static class S05 {260261private final static String TESTCASE =262"annotated setter + arbitrary getter return type";263264private int x;265266@BeanProperty(267description = DESCRIPTION,268bound = BOUND,269expert = EXPERT,270hidden = HIDDEN,271preferred = PREFERRED,272required = REQUIRED,273visualUpdate = UPDATE,274enumerationValues = {V_NAME})275public void setX(int v) { x = v; }276public Object getX() { return x; }277278public void addPropertyChangeListener(PropertyChangeListener l) {}279public void removePropertyChangeListener(PropertyChangeListener l) {}280}281282public static class G06 {283284private final static String TESTCASE = "indexed getter";285286private final int x[] = {X, X, X};287288@BeanProperty(289description = DESCRIPTION,290bound = BOUND,291expert = EXPERT,292hidden = HIDDEN,293preferred = PREFERRED,294required = REQUIRED,295visualUpdate = UPDATE,296enumerationValues = {V_NAME})297public int getX(int i) { return x[i]; }298299public void addPropertyChangeListener(PropertyChangeListener l) {}300public void removePropertyChangeListener(PropertyChangeListener l) {}301}302303public static class S06 {304305private final static String TESTCASE = "indexed setter";306307private final int x[] = {X, X, X};308309@BeanProperty(310description = DESCRIPTION,311bound = BOUND,312expert = EXPERT,313hidden = HIDDEN,314preferred = PREFERRED,315required = REQUIRED,316visualUpdate = UPDATE,317enumerationValues = {V_NAME})318public void setX(int i, int v) { x[i] = v; }319320public void addPropertyChangeListener(PropertyChangeListener l) {}321public void removePropertyChangeListener(PropertyChangeListener l) {}322}323324public static class G07 {325326private final static String TESTCASE =327"indexed (annotated) + non-indexed getters";328329private final int x[] = {X, X, X};330331@BeanProperty(332description = DESCRIPTION,333bound = BOUND,334expert = EXPERT,335hidden = HIDDEN,336preferred = PREFERRED,337required = REQUIRED,338visualUpdate = UPDATE,339enumerationValues = {V_NAME})340public int getX(int i) { return x[i]; }341342public int[] getX() { return x; }343344public void addPropertyChangeListener(PropertyChangeListener l) {}345public void removePropertyChangeListener(PropertyChangeListener l) {}346}347348public static class S07 {349350private final static String TESTCASE =351"indexed (annotated) + non-indexed setters";352353private int x[] = new int[3];354355@BeanProperty(356description = DESCRIPTION,357bound = BOUND,358expert = EXPERT,359hidden = HIDDEN,360preferred = PREFERRED,361required = REQUIRED,362visualUpdate = UPDATE,363enumerationValues = {V_NAME})364public void setX(int i, int v) { x[i] = v; }365366public void setX(int a[]) { x = Arrays.copyOf(a, a.length); }367368public void addPropertyChangeListener(PropertyChangeListener l) {}369public void removePropertyChangeListener(PropertyChangeListener l) {}370}371372// JDK-8132732373public static class G08 {374375private final static String TESTCASE =376"non-indexed (annotated) + indexed getters";377378private final int x[] = {X, X, X};379380@BeanProperty(381description = DESCRIPTION,382bound = BOUND,383expert = EXPERT,384hidden = HIDDEN,385preferred = PREFERRED,386required = REQUIRED,387visualUpdate = UPDATE,388enumerationValues = {V_NAME})389public int[] getX() { return x; }390391public int getX(int i) { return x[i]; }392393public void addPropertyChangeListener(PropertyChangeListener l) {}394public void removePropertyChangeListener(PropertyChangeListener l) {}395}396397// JDK-8132732398public static class S08 {399400private final static String TESTCASE =401"non-indexed (annotated) + indexed setters";402403private int x[] = new int[3];404405@BeanProperty(406description = DESCRIPTION,407bound = BOUND,408expert = EXPERT,409hidden = HIDDEN,410preferred = PREFERRED,411required = REQUIRED,412visualUpdate = UPDATE,413enumerationValues = {V_NAME})414public void setX(int a[]) { x = Arrays.copyOf(a, a.length); }415416public void setX(int i, int v) { x[i] = v; }417418public void addPropertyChangeListener(PropertyChangeListener l) {}419public void removePropertyChangeListener(PropertyChangeListener l) {}420}421422// JDK-8132732423public static class G09 {424425private final static String TESTCASE = "two annotated getters";426427private final int x[] = {X, X, X};428429@BeanProperty(430description = DESCRIPTION,431bound = BOUND,432expert = EXPERT,433hidden = HIDDEN,434preferred = PREFERRED,435required = REQUIRED,436visualUpdate = UPDATE,437enumerationValues = {V_NAME})438public int[] getX() { return x; }439440@BeanProperty(441description = DESCRIPTION_2,442bound = !BOUND,443expert = !EXPERT,444hidden = !HIDDEN,445preferred = !PREFERRED,446required = !REQUIRED,447visualUpdate = !UPDATE)448public int getX(int i) { return x[i]; }449450public void addPropertyChangeListener(PropertyChangeListener l) {}451public void removePropertyChangeListener(PropertyChangeListener l) {}452}453454// JDK-8132732455public static class S09 {456457private final static String TESTCASE = "two annotated setters";458459private int x[] = new int[3];460461@BeanProperty(462description = DESCRIPTION,463bound = BOUND,464expert = EXPERT,465hidden = HIDDEN,466preferred = PREFERRED,467required = REQUIRED,468visualUpdate = UPDATE,469enumerationValues = {V_NAME})470public void setX(int a[]) { x = Arrays.copyOf(a, a.length); }471472@BeanProperty(473description = DESCRIPTION_2,474bound = !BOUND,475expert = !EXPERT,476hidden = !HIDDEN,477preferred = !PREFERRED,478required = !REQUIRED,479visualUpdate = !UPDATE)480public void setX(int i, int v) { x[i] = v; }481482483public void addPropertyChangeListener(PropertyChangeListener l) {}484public void removePropertyChangeListener(PropertyChangeListener l) {}485}486487public static class G10 {488489private final static String TESTCASE =490"getter + similarly named field";491492public int prop, Prop, setProp, getProp;493494@BeanProperty(495description = DESCRIPTION,496bound = BOUND,497expert = EXPERT,498hidden = HIDDEN,499preferred = PREFERRED,500required = REQUIRED,501visualUpdate = UPDATE,502enumerationValues = {V_NAME})503public int getProp() { return X; }504public void setProp(int v) { prop = Prop = setProp = getProp = v; }505506public void addPropertyChangeListener(PropertyChangeListener l) {}507public void removePropertyChangeListener(PropertyChangeListener l) {}508}509510public static class S10 {511512private final static String TESTCASE =513"setter + similarly named field";514515public int prop, Prop, setProp, getProp;516517private int x;518519@BeanProperty(520description = DESCRIPTION,521bound = BOUND,522expert = EXPERT,523hidden = HIDDEN,524preferred = PREFERRED,525required = REQUIRED,526visualUpdate = UPDATE,527enumerationValues = {V_NAME})528public int getProp() { return x; }529public void setProp(int v) { x = v; }530531public void addPropertyChangeListener(PropertyChangeListener l) {}532public void removePropertyChangeListener(PropertyChangeListener l) {}533}534535public static class G11 {536537private final static String TESTCASE =538"getter + similarly named field of other type";539540public Object prop, Prop, setProp, getProp;541542@BeanProperty(543description = DESCRIPTION,544bound = BOUND,545expert = EXPERT,546hidden = HIDDEN,547preferred = PREFERRED,548required = REQUIRED,549visualUpdate = UPDATE,550enumerationValues = {V_NAME})551public int getProp() { return X; }552public void setProp(int v) { prop = Prop = setProp = getProp = v; }553554public void addPropertyChangeListener(PropertyChangeListener l) {}555public void removePropertyChangeListener(PropertyChangeListener l) {}556}557558public static class S11 {559560private final static String TESTCASE =561"setter + similarly named field of other type";562563public String prop, Prop, setProp, getProp;564565private int x;566567@BeanProperty(568description = DESCRIPTION,569bound = BOUND,570expert = EXPERT,571hidden = HIDDEN,572preferred = PREFERRED,573required = REQUIRED,574visualUpdate = UPDATE,575enumerationValues = {V_NAME})576public int getProp() { return x; }577public void setProp(int v) { x = v; }578579public void addPropertyChangeListener(PropertyChangeListener l) {}580public void removePropertyChangeListener(PropertyChangeListener l) {}581}582583// JDK-8132163584public static class G12 {585586private final static String TESTCASE =587"getter having wrapper class return type";588589private final int x = X;590591@BeanProperty(592description = DESCRIPTION,593bound = BOUND,594expert = EXPERT,595hidden = HIDDEN,596preferred = PREFERRED,597required = REQUIRED,598visualUpdate = UPDATE,599enumerationValues = {V_NAME})600public Integer getProp() { return x; }601602public void addPropertyChangeListener(PropertyChangeListener l) {}603public void removePropertyChangeListener(PropertyChangeListener l) {}604}605606// JDK-8132163607public static class S12 {608609private final static String TESTCASE =610"setter with wrapper class argument type";611612private int x;613614@BeanProperty(615description = DESCRIPTION,616bound = BOUND,617expert = EXPERT,618hidden = HIDDEN,619preferred = PREFERRED,620required = REQUIRED,621visualUpdate = UPDATE,622enumerationValues = {V_NAME})623public void setX(Integer v) { x = v; }624625public void addPropertyChangeListener(PropertyChangeListener l) {}626public void removePropertyChangeListener(PropertyChangeListener l) {}627}628629public static class G13 {630631private final static String TESTCASE =632"getter + overloading methods";633634private final int x = X;635636@BeanProperty(637description = DESCRIPTION,638bound = BOUND,639expert = EXPERT,640hidden = HIDDEN,641preferred = PREFERRED,642required = REQUIRED,643visualUpdate = UPDATE,644enumerationValues = {V_NAME})645public int getX() { return x; }646public int getX(boolean arg) { return (arg ? x : 0); }647public int getX(int ... dummy) { return 0; }648649public void addPropertyChangeListener(PropertyChangeListener l) {}650public void removePropertyChangeListener(PropertyChangeListener l) {}651}652653// JDK-8154756654public static class S13 {655656private final static String TESTCASE =657"setter + overloading methods";658659private int x;660661@BeanProperty(662description = DESCRIPTION,663bound = BOUND,664expert = EXPERT,665hidden = HIDDEN,666preferred = PREFERRED,667required = REQUIRED,668visualUpdate = UPDATE,669enumerationValues = {V_NAME})670public void setX(int v) { x = v; }671public int setX() { return (x = X); }672public void setX(int ... dummy) {}673private void setX(Object ... dummy) {}674675676public void addPropertyChangeListener(PropertyChangeListener l) {}677public void removePropertyChangeListener(PropertyChangeListener l) {}678}679680681// JDK-8132888682public static class G14 {683684private final static String TESTCASE = "non-public getter";685686private final int x = X;687688@BeanProperty(689description = DESCRIPTION,690bound = BOUND,691expert = EXPERT,692hidden = HIDDEN,693preferred = PREFERRED,694required = REQUIRED,695visualUpdate = UPDATE,696enumerationValues = {V_NAME})697int getX() { return x; } // getter is not public698699public void addPropertyChangeListener(PropertyChangeListener l) {}700public void removePropertyChangeListener(PropertyChangeListener l) {}701}702703// JDK-8132888704public static class S14 {705706private final static String TESTCASE = "non-public setter";707708private int x;709710@BeanProperty(711description = DESCRIPTION,712bound = BOUND,713expert = EXPERT,714hidden = HIDDEN,715preferred = PREFERRED,716required = REQUIRED,717visualUpdate = UPDATE,718enumerationValues = {V_NAME})719void setX(int v) { x = v; } // setter is not public720721public void addPropertyChangeListener(PropertyChangeListener l) {}722public void removePropertyChangeListener(PropertyChangeListener l) {}723}724725public static class getX {726727private final static String TESTCASE =728"class name coincides with getter name";729730private int x;731732@BeanProperty(733description = DESCRIPTION,734bound = BOUND,735expert = EXPERT,736hidden = HIDDEN,737preferred = PREFERRED,738required = REQUIRED,739visualUpdate = UPDATE,740enumerationValues = {V_NAME})741public int getX() { return x; }742public void setX(int v) { x = v; }743744public void addPropertyChangeListener(PropertyChangeListener l) {}745public void removePropertyChangeListener(PropertyChangeListener l) {}746}747748public static class setX {749750private final static String TESTCASE =751"class name coincides with setter name";752753private int x;754755@BeanProperty(756description = DESCRIPTION,757bound = BOUND,758expert = EXPERT,759hidden = HIDDEN,760preferred = PREFERRED,761required = REQUIRED,762visualUpdate = UPDATE,763enumerationValues = {V_NAME})764public void setX(int v) { x = v; }765public int getX() { return x; }766767public void addPropertyChangeListener(PropertyChangeListener l) {}768public void removePropertyChangeListener(PropertyChangeListener l) {}769}770771// JDK-8132973772public static class GS {773774private final static String TESTCASE =775"both getter and setter are annotated";776777private int x;778779@BeanProperty(780description = DESCRIPTION,781bound = BOUND,782expert = EXPERT,783hidden = HIDDEN,784preferred = PREFERRED,785required = REQUIRED,786visualUpdate = UPDATE,787enumerationValues = {V_NAME})788public int getX() { return x; }789790@BeanProperty(791description = DESCRIPTION_2,792bound = !BOUND,793expert = !EXPERT,794hidden = !HIDDEN,795preferred = !PREFERRED,796required = !REQUIRED,797visualUpdate = !UPDATE)798public void setX(int v) { x = v; }799800801public void addPropertyChangeListener(PropertyChangeListener l) {}802public void removePropertyChangeListener(PropertyChangeListener l) {}803}804805public static class Self {806807private final static String TESTCASE = "trivial singleton";808809private static Self instance = null;810private Self() {}811812@BeanProperty(813description = DESCRIPTION,814bound = BOUND,815expert = EXPERT,816hidden = HIDDEN,817preferred = PREFERRED,818required = REQUIRED,819visualUpdate = UPDATE)820public Self getSelf() {821if (instance == null) { instance = new Self(); }822return instance;823}824825public void addPropertyChangeListener(PropertyChangeListener l) {}826public void removePropertyChangeListener(PropertyChangeListener l) {}827}828829public static class SelfArr {830831private final static String TESTCASE = "trivial singleton + array";832833private static SelfArr arr[] = null;834private SelfArr() {}835836@BeanProperty(837description = DESCRIPTION,838bound = BOUND,839expert = EXPERT,840hidden = HIDDEN,841preferred = PREFERRED,842required = REQUIRED,843visualUpdate = UPDATE)844public SelfArr[] getSelfArr() {845if (arr == null) { arr = new SelfArr[]{new SelfArr(), new SelfArr()}; }846return arr;847}848849public void addPropertyChangeListener(PropertyChangeListener l) {}850public void removePropertyChangeListener(PropertyChangeListener l) {}851}852853public enum E {854855ONE,856TWO {857@BeanProperty(858description = DESCRIPTION,859bound = BOUND,860expert = EXPERT,861hidden = HIDDEN,862preferred = PREFERRED,863required = REQUIRED,864visualUpdate = UPDATE,865enumerationValues = {V_NAME})866public void setX(int v) {}867868public void addPropertyChangeListener(PropertyChangeListener l) {}869public void removePropertyChangeListener(PropertyChangeListener l) {}870};871872@BeanProperty(873description = DESCRIPTION,874bound = BOUND,875expert = EXPERT,876hidden = HIDDEN,877preferred = PREFERRED,878required = REQUIRED,879visualUpdate = UPDATE,880enumerationValues = {V_NAME})881public void setX(int v) {}882883public void addPropertyChangeListener(PropertyChangeListener l) {}884public void removePropertyChangeListener(PropertyChangeListener l) {}885886}887888private enum EB {889890TRUE(true), FALSE(false);891892private boolean b;893private EB(boolean v) { b = v; }894895@BeanProperty(896description = DESCRIPTION,897bound = BOUND,898expert = EXPERT,899hidden = HIDDEN,900preferred = PREFERRED,901required = REQUIRED,902visualUpdate = UPDATE)903public boolean isTrue() { return true; }904905public void addPropertyChangeListener(PropertyChangeListener l) {}906public void removePropertyChangeListener(PropertyChangeListener l) {}907908}909910911// ---------- checks ----------912913private static boolean check(String what, boolean v, boolean ref) {914915boolean ok = (v == ref);916if (!ok) { System.out.println(917"invalid " + what + ": " + v + ", expected: " + ref); }918return ok;919}920921private static boolean checkInfo(BeanInfo i, boolean checkVals) {922923System.out.println("checking info...");924925PropertyDescriptor descriptors[] = i.getPropertyDescriptors();926int nd = descriptors.length;927if (nd != 1) {928System.out.println("invalid number of descriptors: " + nd);929return false;930}931932PropertyDescriptor d = descriptors[0];933934String descr = d.getShortDescription();935boolean ok = descr.equals(DESCRIPTION);936if (!ok) { System.out.println("invalid description: " + descr +937", expected: " + DESCRIPTION); }938939ok &= check("isBound", d.isBound(), BOUND);940ok &= check("isExpert", d.isExpert(), EXPERT);941ok &= check("isHidden", d.isHidden(), HIDDEN);942ok &= check("isPreferred", d.isPreferred(), PREFERRED);943ok &= check("required", (boolean) d.getValue("required"), REQUIRED);944ok &= check("visualUpdate",945(boolean) d.getValue("visualUpdate"), UPDATE);946947if (!checkVals) { return ok; }948949Object vals[] = (Object[]) d.getValue("enumerationValues");950if (vals == null) {951System.out.println("null enumerationValues");952return false;953}954955boolean okVals = (956(vals.length == 3) &&957vals[0].toString().equals(V_SHORT) &&958vals[1].toString().equals(V) &&959vals[2].toString().equals(V_NAME));960961if (!okVals) { System.out.println("invalid enumerationValues"); }962963return (ok && okVals);964}965966private static boolean checkAlternativeInfo(BeanInfo i) {967968System.out.println("checking alternative info...");969970PropertyDescriptor descriptors[] = i.getPropertyDescriptors();971int nd = descriptors.length;972if (nd != 1) {973System.out.println("invalid number of descriptors: " + nd);974return false;975}976977PropertyDescriptor d = descriptors[0];978979String descr = d.getShortDescription();980boolean ok = descr.equals(DESCRIPTION_2);981if (!ok) { System.out.println("invalid alternative description: " +982descr + ", expected: " + DESCRIPTION_2); }983984ok &= check("isBound", d.isBound(), !BOUND);985ok &= check("isExpert", d.isExpert(), !EXPERT);986ok &= check("isHidden", d.isHidden(), !HIDDEN);987ok &= check("isPreferred", d.isPreferred(), !PREFERRED);988ok &= check("required", (boolean) d.getValue("required"), !REQUIRED);989ok &= check("visualUpdate",990(boolean) d.getValue("visualUpdate"), !UPDATE);991992Object vals[] = (Object[]) d.getValue("enumerationValues");993if (vals != null || vals.length > 0) {994System.out.println("non-null enumerationValues");995return false;996}997998return ok;999}100010011002private static boolean checkAlternative(Class<?> c) {1003return (1004c.equals(G09.class) ||1005c.equals(S09.class) ||1006c.equals(GS.class));1007}10081009private static boolean ignoreVals(Class<?> c) {1010return (c.equals(Self.class) || c.equals(SelfArr.class)) || c.equals(EB.class);1011}101210131014// ---------- run test ----------10151016public static void main(String[] args) throws Exception {10171018Class<?> cases[] = {10191020G01.class, S01.class,1021// G02.class, S02.class, // TODO: please update after 8132703 fix1022// G03.class, S03.class, // TODO: please update after 8132703 fix1023// G04.class, S04.class, // TODO: please update after 8132163 fix1024G05.class, // S05.class, // TODO: please update after 8132163 fix1025G06.class, S06.class,1026G07.class, S07.class,1027// G08.class, S08.class, // TODO: please update after 8132732 fix1028// G09.class, S09.class, // TODO: please update after 8132732 fix1029G10.class, S10.class,1030G11.class, S11.class,1031// G12.class, S12.class, // TODO: please update after 8132163 fix1032G13.class, // S13.class, // TODO: please update after 8154756 fix1033// G14.class, S14.class, // TODO: please update after 8132888 fix or1034// remove these cases if it is not an issue1035GS.class,1036getX.class, setX.class,1037Self.class, SelfArr.class1038};10391040boolean passed = true;10411042for (Class<?> c: cases) {10431044java.lang.reflect.Field f = c.getDeclaredField("TESTCASE");1045f.setAccessible(true);1046String descr = f.get(c).toString();10471048System.out.println("\n" + c.getSimpleName() + " (" + descr + "):");1049BeanInfo i;1050try { i = Introspector.getBeanInfo(c, Object.class); }1051catch (IntrospectionException e) { throw new RuntimeException(e); }1052boolean ok = checkInfo(i, !ignoreVals(c));1053if (checkAlternative(c)) {1054ok |= checkAlternativeInfo(i);1055}1056System.out.println(ok ? "OK" : "NOK");1057passed = passed && ok;1058}10591060// enums10611062Class<?> enumCases[] = {1063E.class, E.TWO.getClass(), EB.class1064};10651066int ne = 1;1067for (Class<?> c: enumCases) {10681069System.out.println("\nEnum-" + ne + ":");1070ne++;10711072BeanInfo i;1073try { i = Introspector.getBeanInfo(c, Enum.class); }1074catch (IntrospectionException e) { throw new RuntimeException(e); }1075boolean ok = checkInfo(i, !ignoreVals(c));1076System.out.println(ok ? "OK" : "NOK");1077passed = passed && ok;1078}107910801081if (!passed) { throw new RuntimeException("test failed"); }1082System.out.println("\ntest passed");1083}1084}108510861087