You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2003/02/04 23:06:24 UTC

cvs commit: jakarta-commons/lang/src/test/org/apache/commons/lang ArrayUtilsTest.java

scolebourne    2003/02/04 14:06:24

  Modified:    lang/src/java/org/apache/commons/lang ArrayUtils.java
               lang/src/test/org/apache/commons/lang ArrayUtilsTest.java
  Log:
  Add support for indexOf, lastIndexOf and contains for ArrayUtils
  from Nikolay Metchev, bug ref 15438
  
  Revision  Changes    Path
  1.8       +139 -16   jakarta-commons/lang/src/java/org/apache/commons/lang/ArrayUtils.java
  
  Index: ArrayUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/src/java/org/apache/commons/lang/ArrayUtils.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ArrayUtils.java	23 Dec 2002 00:32:24 -0000	1.7
  +++ ArrayUtils.java	4 Feb 2003 22:06:24 -0000	1.8
  @@ -1,7 +1,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2002-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -67,6 +67,7 @@
    * @author Stephen Colebourne
    * @author Moritz Petersen
    * @author <a href="mailto:fredrik@westermarck.com">Fredrik Westermarck</a>
  + * @author Nikolay Metchev
    * @since 2.0
    * @version $Id$
    */
  @@ -104,7 +105,7 @@
       }
   
       // Basic methods handling multi-dimensional arrays
  -    //--------------------------------------------------------------------------
  +    //-----------------------------------------------------------------------
       
       /**
        * <p>Outputs an array as a String, treating <code>null</code> as an empty array.</p>
  @@ -166,7 +167,7 @@
           return new EqualsBuilder().append(array1, array2).isEquals();
       }
       
  -    //--------------------------------------------------------------------------
  +    //-----------------------------------------------------------------------
       
       /**
        * <p>Converts the given array into a {@link Map}. Each element of the array
  @@ -324,7 +325,7 @@
   //        return new ToStringBuilder(array, ToStringStyle.SIMPLE_STYLE).append(array).toString();
   //    }
       
  -    //--------------------------------------------------------------------------
  +    //-----------------------------------------------------------------------
   
       /**
        * <p>Shallow clones an array returning a typecast result and handling
  @@ -480,7 +481,7 @@
           return (boolean[]) array.clone();
       }
   
  -    //--------------------------------------------------------------------------
  +    //-----------------------------------------------------------------------
   
       /**
        * <p>Checks whether two arrays are the same length, treating
  @@ -680,6 +681,8 @@
           return array1.getClass().getName().equals(array2.getClass().getName());
       }
       
  +    //-----------------------------------------------------------------------
  +    
       /** 
        * Reverses the order of the given array.
        * <p>
  @@ -687,7 +690,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(Object[] array) {
           if (array == null) {
  @@ -710,7 +713,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(long[] array) {
           if (array == null) {
  @@ -733,7 +736,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(int[] array) {
           if (array == null) {
  @@ -756,7 +759,7 @@
        * <p>
        * There is no special handling for multi-dimensional arrays.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(short[] array) {
           if (array == null) {
  @@ -779,7 +782,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(char[] array) {
           if (array == null) {
  @@ -802,7 +805,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(byte[] array) {
           if (array == null) {
  @@ -825,7 +828,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(double[] array) {
           if (array == null) {
  @@ -848,7 +851,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(float[] array) {
           if (array == null) {
  @@ -871,7 +874,7 @@
        * <p>
        * The method does nothing if <code>null</code> is passed in.
        * 
  -     * @param array  the array to reverse
  +     * @param array  the array to reverse, may be <code>null</code>
        */
       public static void reverse(boolean[] array) {
           if (array == null) {
  @@ -888,5 +891,125 @@
               i++;
           }
       }
  -
  +    
  +    //-----------------------------------------------------------------------
  +    
  +    /**
  +     * Find the index of the given object in the array.
  +     * <p>
  +     * The method returns -1 if a <code>null</code> array is passed in.
  +     * 
  +     * @param array  the array to search through for the object, may be <code>null</code>
  +     * @param objectToFind  the object to find, may be <code>null</code>
  +     * @return the index of the object within the array, or -1 if not found
  +     */
  +    public static int indexOf(Object[] array, Object objectToFind) {
  +        return indexOf(array, objectToFind, 0);
  +    }
  +    
  +    /**
  +     * Find the index of the given object in the array starting at the given index.
  +     * <p>
  +     * The method returns -1 if a <code>null</code> array is passed in.
  +     * <p>
  +     * A negative startIndex is treated as zero. A startIndex larger than the array
  +     * length will return -1.
  +     * 
  +     * @param array  the array to search through for the object, may be <code>null</code>
  +     * @param objectToFind  the object to find, may be <code>null</code>
  +     * @param startIndex  the index to start searching at
  +     * @return the index of the object within the array starting at the
  +     *  given index, or -1 if not found
  +     */
  +    public static int indexOf(Object[] array, Object objectToFind, int startIndex) {
  +        if (array == null) {
  +            return -1;
  +        }
  +        if (startIndex < 0) {
  +            startIndex = 0;
  +        }
  +        if (objectToFind == null) {
  +            for (int i = startIndex; i < array.length; i++) {
  +                if (array[i] == null) {
  +                    return i;
  +                }
  +            }
  +        } else {
  +            for (int i = startIndex; i < array.length; i++) {
  +                if (objectToFind.equals(array[i])) {
  +                    return i;
  +                }
  +            }
  +        }
  +        return -1;
  +    }
  +    
  +    /**
  +     * Find the last index of the given object within the array.
  +     * <p>
  +     * The method returns -1 if a <code>null</code> array is passed in.
  +     * 
  +     * @param array  the array to travers backwords looking for the object, may be <code>null</code>
  +     * @param objectToFind  the object to find, may be <code>null</code>
  +     * @return the last index of the object to find, or -1 if not found
  +     */
  +    public static int lastIndexOf(Object[] array, Object objectToFind) {
  +        if (array == null) {
  +            return -1;
  +        }
  +        return lastIndexOf(array, objectToFind, array.length - 1);
  +    }
  +    
  +    /**
  +     * Find the last index of the given object in the array starting at the given index.
  +     * <p>
  +     * The method returns -1 if a <code>null</code> array is passed in.
  +     * <p>
  +     * A negative startIndex will return -1. A startIndex larger than the array
  +     * length will search from the end of the array.
  +     * 
  +     * @param array  the array to traverse for looking for the object, may be <code>null</code>
  +     * @param objectToFind  the object to find, may be <code>null</code>
  +     * @param startIndex  the start index to travers backwards from
  +     * @return the last index of the object within the array starting at the given index,
  +     *  or -1 if not found
  +     */
  +    public static int lastIndexOf(Object[] array, Object objectToFind, int startIndex) {
  +        if (array == null) {
  +            return -1;
  +        }
  +        if (startIndex < 0) {
  +            return -1;
  +        } else if (startIndex >= array.length) {
  +            startIndex = array.length - 1;
  +        }
  +        if (objectToFind == null) {
  +            for (int i = startIndex; i >= 0; i--) {
  +                if (array[i] == null) {
  +                    return i;
  +                }
  +            }
  +        } else {
  +            for (int i = startIndex; i >= 0; i--) {
  +                if (objectToFind.equals(array[i])) {
  +                    return i;
  +                }
  +            }
  +        }
  +        return -1;
  +    }
  +    
  +    /**
  +     * Checks if the object is in the given array.
  +     * <p>
  +     * The method returns <code>false</code> if a <code>null</code> array is passed in.
  +     * 
  +     * @param array  the array to search through
  +     * @param objectToFind  the object to find
  +     * @return <code>true</code> if the array contains the object
  +     */
  +    public static boolean contains(Object[] array, Object objectToFind) {
  +        return (indexOf(array, objectToFind) != -1);
  +    }
  +    
   }
  
  
  
  1.5       +70 -2     jakarta-commons/lang/src/test/org/apache/commons/lang/ArrayUtilsTest.java
  
  Index: ArrayUtilsTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/lang/src/test/org/apache/commons/lang/ArrayUtilsTest.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ArrayUtilsTest.java	15 Dec 2002 15:00:46 -0000	1.4
  +++ ArrayUtilsTest.java	4 Feb 2003 22:06:24 -0000	1.5
  @@ -1,7 +1,7 @@
   /* ====================================================================
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2002-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -65,6 +65,7 @@
    *
    * @author <a href="mailto:scolebourne@joda.org">Stephen Colebourne</a>
    * @author Moritz Petersen
  + * @author Nikolay Metchev
    * @version $Id$
    */
   public class ArrayUtilsTest extends TestCase {
  @@ -637,4 +638,71 @@
           assertEquals(null, array);
       }
       
  +    //-----------------------------------------------------------------------
  +    public void testIndexOf() {
  +        Object[] array = new Object[] { "0", "1", "2", "3", null, "0" };
  +        assertEquals(-1, ArrayUtils.indexOf(null, null));
  +        assertEquals(-1, ArrayUtils.indexOf(null, "0"));
  +        assertEquals(0, ArrayUtils.indexOf(array, "0"));
  +        assertEquals(1, ArrayUtils.indexOf(array, "1"));
  +        assertEquals(2, ArrayUtils.indexOf(array, "2"));
  +        assertEquals(3, ArrayUtils.indexOf(array, "3"));
  +        assertEquals(4, ArrayUtils.indexOf(array, null));
  +        assertEquals(-1, ArrayUtils.indexOf(array, "notInArray"));
  +    }
  +
  +    public void testIndexOfWithStartIndex() {
  +        Object[] array = new Object[] { "0", "1", "2", "3", null, "0" };
  +        assertEquals(-1, ArrayUtils.indexOf(null, null, 2));
  +        assertEquals(-1, ArrayUtils.indexOf(null, "0", 2));
  +        assertEquals(5, ArrayUtils.indexOf(array, "0", 2));
  +        assertEquals(-1, ArrayUtils.indexOf(array, "1", 2));
  +        assertEquals(2, ArrayUtils.indexOf(array, "2", 2));
  +        assertEquals(3, ArrayUtils.indexOf(array, "3", 2));
  +        assertEquals(4, ArrayUtils.indexOf(array, null, 2));
  +        assertEquals(-1, ArrayUtils.indexOf(array, "notInArray"));
  +        
  +        assertEquals(4, ArrayUtils.indexOf(array, null, -1));
  +        assertEquals(-1, ArrayUtils.indexOf(array, "0", 6));
  +    }
  +
  +    public void testLastIndexOf() {
  +        Object[] array = new Object[] { "0", "1", "2", "3", null, "0" };
  +        assertEquals(-1, ArrayUtils.lastIndexOf(null, null));
  +        assertEquals(-1, ArrayUtils.lastIndexOf(null, "0"));
  +        assertEquals(5, ArrayUtils.lastIndexOf(array, "0"));
  +        assertEquals(1, ArrayUtils.lastIndexOf(array, "1"));
  +        assertEquals(2, ArrayUtils.lastIndexOf(array, "2"));
  +        assertEquals(3, ArrayUtils.lastIndexOf(array, "3"));
  +        assertEquals(4, ArrayUtils.lastIndexOf(array, null));
  +        assertEquals(-1, ArrayUtils.lastIndexOf(array, "notInArray"));
  +    }
  +
  +    public void testLastIndexOfWithStartIndex() {
  +        Object[] array = new Object[] { "0", "1", "2", "3", null, "0" };
  +        assertEquals(-1, ArrayUtils.lastIndexOf(null, null, 2));
  +        assertEquals(-1, ArrayUtils.lastIndexOf(null, "0", 2));
  +        assertEquals(0, ArrayUtils.lastIndexOf(array, "0", 2));
  +        assertEquals(1, ArrayUtils.lastIndexOf(array, "1", 2));
  +        assertEquals(2, ArrayUtils.lastIndexOf(array, "2", 2));
  +        assertEquals(-1, ArrayUtils.lastIndexOf(array, "3", 2));
  +        assertEquals(4, ArrayUtils.lastIndexOf(array, null, 5));
  +        assertEquals(-1, ArrayUtils.lastIndexOf(array, null, 2));
  +        assertEquals(-1, ArrayUtils.lastIndexOf(array, "notInArray"));
  +        
  +        assertEquals(-1, ArrayUtils.lastIndexOf(array, null, -1));
  +        assertEquals(5, ArrayUtils.lastIndexOf(array, "0", 88));
  +    }
  +
  +    public void testContains() {
  +        Object[] array = new Object[] { "0", "1", "2", "3", null, "0" };
  +        assertEquals(false, ArrayUtils.contains(null, null));
  +        assertEquals(false, ArrayUtils.contains(null, "1"));
  +        assertEquals(true, ArrayUtils.contains(array, "0"));
  +        assertEquals(true, ArrayUtils.contains(array, "1"));
  +        assertEquals(true, ArrayUtils.contains(array, "2"));
  +        assertEquals(true, ArrayUtils.contains(array, "3"));
  +        assertEquals(true, ArrayUtils.contains(array, null));
  +        assertEquals(false, ArrayUtils.contains(array, "notInArray"));
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org