From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14710 invoked by alias); 11 May 2010 21:12:04 -0000 Received: (qmail 14700 invoked by uid 22791); 11 May 2010 21:12:03 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 11 May 2010 21:11:58 +0000 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o4BLBuD9018249 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 11 May 2010 17:11:57 -0400 Received: from rivendell.middle-earth.co.uk (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o4BLBrAx002205 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Tue, 11 May 2010 17:11:55 -0400 Date: Tue, 11 May 2010 21:12:00 -0000 From: Andrew John Hughes To: mauve-patches@sources.redhat.com Subject: FYI: Test for PR43536 Message-ID: <20100511211152.GA8263@rivendell.middle-earth.co.uk> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="RnlQjJ0d97Da+TV1" Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) Mailing-List: contact mauve-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: mauve-patches-owner@sourceware.org X-SW-Source: 2010/txt/msg00000.txt.bz2 --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 721 This patch adds a test to Mauve which ensures all known Collection implementations in java.util and java.util.concurrent meet the requirements of remove(Object). Others may be added later. 2010-05-11 Andrew John Hughes PR classpath/43536 * gnu/testlet/java/util/Collection/Test.java: New test ensuring all Collection implementations meet the requirements of remove(Object). -- Andrew :) Free Java Software Engineer Red Hat, Inc. (http://www.redhat.com) Support Free Java! Contribute to GNU Classpath and the OpenJDK http://www.gnu.org/software/classpath http://openjdk.java.net PGP Key: 94EFD9D8 (http://subkeys.pgp.net) Fingerprint = F8EF F1EA 401E 2E60 15FA 7927 142C 2591 94EF D9D8 --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="pr43536.diff" Content-length: 4996 Index: gnu/testlet/java/util/Collection/Test.java =================================================================== RCS file: gnu/testlet/java/util/Collection/Test.java diff -N gnu/testlet/java/util/Collection/Test.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/testlet/java/util/Collection/Test.java 11 May 2010 20:11:59 -0000 @@ -0,0 +1,155 @@ +// Tags: JDK1.5 + +// Copyright (C) 2010 Andrew John Hughes + +// This file is part of Mauve. + +// Mauve is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. + +// Mauve 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 for more details. + +// You should have received a copy of the GNU General Public License +// along with Mauve; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +package gnu.testlet.java.util.Collection; + +import gnu.testlet.TestHarness; +import gnu.testlet.Testlet; + +import java.util.Collection; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Delayed; +import java.util.concurrent.TimeUnit; + +/** + * Some tests for the remove() method in the {@link List} interface. + */ +public class Test implements Testlet +{ + + private TestHarness harness; + + /** + * Runs the test using the specified harness. + * + * @param harness the test harness (null not permitted). + */ + public void test(TestHarness harness) + { + this.harness = harness; + testClass(java.util.concurrent.ArrayBlockingQueue.class); + testClass(java.util.ArrayDeque.class); + testClass(java.util.ArrayList.class); + testClass(java.util.concurrent.ConcurrentLinkedQueue.class); + testClass(java.util.concurrent.ConcurrentSkipListSet.class); + testClass(java.util.concurrent.CopyOnWriteArrayList.class); + testClass(java.util.concurrent.CopyOnWriteArraySet.class); + testClass(java.util.concurrent.DelayQueue.class); + testClass(java.util.EnumSet.class); + testClass(java.util.HashSet.class); + testClass(java.util.concurrent.LinkedBlockingQueue.class); + testClass(java.util.LinkedHashSet.class); + testClass(java.util.LinkedList.class); + testClass(java.util.concurrent.PriorityBlockingQueue.class); + testClass(java.util.PriorityQueue.class); + testClass(java.util.Stack.class); + testClass(java.util.concurrent.SynchronousQueue.class); + testClass(java.util.TreeSet.class); + testClass(java.util.Vector.class); + } + + /** + * Tests the given {@link java.util.Collection} class. + * + * @param cls the class to test. + */ + public void testClass(Class cls) + { + harness.checkPoint(cls.getName()); + Collection result = null; + try + { + result = (Collection) cls.newInstance(); + } + catch (Exception e) + { + harness.debug(e); + } + if (result != null) + { + testRemove(result); + } + } + + /** + * Test the {@link Collection#remove(Object)} method of + * the given collection. + * + * @param coll the collection to test. + */ + public void testRemove(Collection coll) + { + /** + * Use Delayed Object so DelayQueue + * and sorted collections work. + */ + Delayed obj = new Delayed() + { + public long getDelay(TimeUnit unit) + { + return unit.convert(10, TimeUnit.MINUTES); + } + public int compareTo(Delayed o) + { + Long other = o.getDelay(TimeUnit.NANOSECONDS); + return other.compareTo(getDelay(TimeUnit.NANOSECONDS)); + } + }; + String type = coll.getClass().getName(); + + harness.check(coll.remove(obj) == false, + "Object is not present in empty " + type); + + boolean result = false; + try + { + result = coll.remove(null); + } + catch (NullPointerException e) + { + /* Collection does not support null elements */ + } + harness.check(result == false, "Null is not present in empty " + type); + + /* Can't do post-addition tests if no capacity */ + if (coll instanceof BlockingQueue && + ((BlockingQueue) coll).remainingCapacity() == 0) + return; + + coll.add(obj); + harness.check(coll.remove(obj) == true, + "Object is present in non-empty " + type); + + result = true; + try + { + coll.add(null); + result = coll.remove(null); + } + catch (NullPointerException e) + { + /* Collection does not support null elements */ + } + harness.check(result == true, "Null is present in non-empty " + type); + } + +} --RnlQjJ0d97Da+TV1--