commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benedikt Ritter <brit...@apache.org>
Subject Re: svn commit: r1760391 - in /commons/proper/beanutils/trunk/src: main/java/org/apache/commons/beanutils/PropertyUtilsBean.java test/java/org/apache/commons/beanutils/bugs/Jira492TestCase.java
Date Wed, 14 Sep 2016 06:23:25 GMT
Hello,

<stain@apache.org> schrieb am Mo., 12. Sep. 2016 um 17:36 Uhr:

> Author: stain
> Date: Mon Sep 12 15:36:03 2016
> New Revision: 1760391
>
> URL: http://svn.apache.org/viewvc?rev=1760391&view=rev
> Log:
> BEANUTILS-492: Document getPropertyType() no longer supporting List
>
> Added:
>
> commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira492TestCase.java
> Modified:
>
> commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java
>
> Modified:
> commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java?rev=1760391&r1=1760390&r2=1760391&view=diff
>
> ==============================================================================
> ---
> commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java
> (original)
> +++
> commons/proper/beanutils/trunk/src/main/java/org/apache/commons/beanutils/PropertyUtilsBean.java
> Mon Sep 12 15:36:03 2016
> @@ -1086,6 +1086,13 @@ public class PropertyUtilsBean {
>       * of a name reference is indexed, the type of the property itself
> will
>       * be returned.  If the last (or only) element has no property with
> the
>       * specified name, <code>null</code> is returned.
> +     * <p>
> +     * If the property is an indexed property (e.g.
> <code>String[]</code>),
> +     * this method will return the type of the items within that array.
> +     * Note that from Java 8 and newer, this method do not support
> +     * such index types from items within an Collection, and will
> +     * instead return the collection type (e.g. java.util.List) from the
> +     * getter mtethod.
>       *
>       * @param bean Bean for which a property descriptor is requested
>       * @param name Possibly indexed and/or nested name of the property for
>
> Added:
> commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira492TestCase.java
> URL:
> http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira492TestCase.java?rev=1760391&view=auto
>
> ==============================================================================
> ---
> commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira492TestCase.java
> (added)
> +++
> commons/proper/beanutils/trunk/src/test/java/org/apache/commons/beanutils/bugs/Jira492TestCase.java
> Mon Sep 12 15:36:03 2016
> @@ -0,0 +1,153 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.commons.beanutils.bugs;
> +
> +import static org.junit.Assert.assertEquals;
> +import static org.junit.Assert.assertTrue;
> +
> +import java.beans.BeanInfo;
> +import java.beans.IndexedPropertyDescriptor;
> +import java.beans.IntrospectionException;
> +import java.beans.Introspector;
> +import java.beans.PropertyDescriptor;
> +import java.util.ArrayList;
> +import java.util.Arrays;
> +import java.util.List;
> +import java.util.Map;
> +
> +import org.apache.commons.beanutils.BeanUtilsBean;
> +import org.apache.commons.beanutils.PropertyUtilsBean;
> +import org.junit.Assert;
> +import org.junit.Before;
> +import org.junit.Test;
> +
> +/**
> + * This test verifies that although BEANUTILS-492
> + * means {@link IndexedPropertyDescriptor}s are not
> + * returned for properties of type {@link List}, they
> + * can still be accessed as positional items.
> + *
> + */
> +public class Jira492TestCase {
> +
> +       private final BeanUtilsBean beanUtils = new BeanUtilsBean();
> +
> +       private final PropertyUtilsBean propertyUtils = new
> PropertyUtilsBean();
> +
> +       public static class IndexedBean {
> +               private List<String> someList = new ArrayList<String>();
> +               public List<String> getSomeList() {
> +                       return someList;
> +               }
> +               public void setSomeList(List<String> someList) {
> +                       this.someList = someList;
> +               }
> +               public void setSomeList(int i, String value) {
> +                       someList.set(i, value);
> +               }
> +               public String getSomeList(int i) {
> +                       return someList.get(i);
> +               }
> +       }
> +
> +       public static boolean supportsIndexedLists() throws
> IntrospectionException {
> +               BeanInfo beanInfo =
> Introspector.getBeanInfo(IndexedBean.class);
> +               for (PropertyDescriptor pd :
> beanInfo.getPropertyDescriptors()) {
> +                       if (pd.getName().equals("someList")) {
> +                               return pd instanceof
> IndexedPropertyDescriptor;
> +                       }
> +               }
> +               Assert.fail("Could not find PropertyDescriptor for
> 'file'");
> +               return false;
> +       }
> +
> +
> +       private IndexedBean bean;
> +
> +       @Before
> +       public void makeBean() {
> +               bean = new IndexedBean();
> +               bean.setSomeList(Arrays.asList("item0", "item1"));
> +       }
> +
> +       @Test
> +       public void getIndexedProperty() throws Exception {
> +               assertEquals("item0", beanUtils.getIndexedProperty(bean,
> "someList", 0));
> +               assertEquals("item1", beanUtils.getIndexedProperty(bean,
> "someList[1]"));
> +       }
> +
> +       @Test
> +       public void getPropertySubScript() throws Exception {
> +               assertEquals("item0", beanUtils.getProperty(bean,
> "someList[0]"));
> +               assertEquals("item1", beanUtils.getProperty(bean,
> "someList[1]"));
> +       }
> +
> +       @Test
> +       public void setIndexedProperty() throws Exception {
> +               beanUtils.setProperty(bean, "someList[1]",
> "item1-modified");
> +               assertEquals("item1-modified",
> beanUtils.getIndexedProperty(bean, "someList", 1));
> +       }
> +
> +       @Test
> +       public void getProperty() throws Exception {
> +               assertEquals("item0", beanUtils.getProperty(bean,
> "someList"));
> +       }
> +
> +       @Test
> +       public void getPropertyUnconverted() throws Exception {
> +               Object someList = propertyUtils.getProperty(bean,
> "someList");
> +               assertTrue("Did not retrieve list", someList instanceof
> List);
> +       }
> +
> +       public void getArrayProperty() throws Exception {
> +               String[] arr = beanUtils.getArrayProperty(bean,
> "someList");
> +               assertEquals(2, arr.length);
> +               assertEquals("item0", arr[0]);
> +               assertEquals("item1", arr[1]);
> +       }
> +
> +       @Test
> +       public void describe() throws Exception {
> +               Map<String, String> described = beanUtils.describe(bean);
> +               // Only first element survives as a String
> +               assertEquals("item0", described.get("someList"));
> +       }
> +
> +       @Test
> +       public void getPropertyType() throws Exception {
> +               if (supportsIndexedLists()) {
>

How about implementing two methods and using
assumeTrue(supportsIndexedLists()) ?


> +                       // legacy behaviour (< Java 8)
> +                       assertEquals(String.class,
> propertyUtils.getPropertyType(bean, "someList[0]"));
> +               } else {
> +                       assertEquals(List.class,
> propertyUtils.getPropertyType(bean, "someList"));
> +               }
> +       }
> +
> +       @Test
> +       public void getPropertyDescriptor() throws Exception {
> +               PropertyDescriptor propDesc =
> propertyUtils.getPropertyDescriptor(bean, "someList");
> +               if (supportsIndexedLists()) {
> +                       // Java 7 or earlier? (BEANUTILS-492)
> +                       IndexedPropertyDescriptor indexed =
> (IndexedPropertyDescriptor) propDesc;
> +                       assertEquals(String.class,
> indexed.getIndexedReadMethod().getReturnType());
> +               } else {
> +
> +               }
> +       }
> +
> +
> +}
>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message