Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 89523 invoked from network); 4 Mar 2008 08:04:20 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Mar 2008 08:04:20 -0000 Received: (qmail 31247 invoked by uid 500); 4 Mar 2008 08:04:16 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 31218 invoked by uid 500); 4 Mar 2008 08:04:16 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 31209 invoked by uid 99); 4 Mar 2008 08:04:16 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Mar 2008 00:04:16 -0800 X-ASF-Spam-Status: No, hits=-1998.0 required=10.0 tests=ALL_TRUSTED,URIBL_BLACK X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Mar 2008 08:03:24 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 738141A9844; Tue, 4 Mar 2008 00:03:11 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r633384 [12/15] - in /harmony/enhanced/classlib/branches/java6: depends/build/platform/ depends/files/ depends/files/bcprov/ doc/ doc/classlib/ make/ make/linux.ia64/ make/linux.ppc32/ make/linux.ppc64/ make/linux.x86.libstdc++6/ make/linux... Date: Tue, 04 Mar 2008 08:02:45 -0000 To: commits@harmony.apache.org From: tonywu@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080304080315.738141A9844@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownHostExceptionTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownHostExceptionTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownHostExceptionTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownHostExceptionTest.java Tue Mar 4 00:02:13 2008 @@ -17,45 +17,52 @@ package org.apache.harmony.luni.tests.java.net; -public class UnknownHostExceptionTest extends junit.framework.TestCase { +import java.net.UnknownHostException; - /** - * @tests java.net.UnknownHostException#UnknownHostException() - */ - public void test_Constructor() { - // Test for method java.net.UnknownHostException() - try { - java.net.InetAddress.getByName("a.b.c.x.y.z.com"); - } catch (java.net.UnknownHostException e) { - return; - } - fail("Failed to generate Exception"); - } - - /** - * @tests java.net.UnknownHostException#UnknownHostException(java.lang.String) - */ - public void test_ConstructorLjava_lang_String() { - // Test for method java.net.UnknownHostException(java.lang.String) - try { - java.net.InetAddress.getByName("a.b.c.x.y.z.com"); - } catch (java.net.UnknownHostException e) { - return; - } - fail("Failed to generate Exception"); - } - - /** - * Sets up the fixture, for example, open a network connection. This method - * is called before a test is executed. - */ - protected void setUp() { - } - - /** - * Tears down the fixture, for example, close a network connection. This - * method is called after a test is executed. - */ - protected void tearDown() { - } +import junit.framework.TestCase; + +public class UnknownHostExceptionTest extends TestCase { + + /** + * @tests java.net.UnknownHostException#UnknownHostException() + */ + public void test_Constructor() { + try { + if (true) { + throw new UnknownHostException(); + } + fail("Failed to generate Exception"); + } catch (UnknownHostException e) { + // Expected + } + } + + /** + * @tests java.net.UnknownHostException#UnknownHostException(java.lang.String) + */ + public void test_ConstructorLjava_lang_String() { + try { + if (true) { + throw new UnknownHostException("test"); + } + fail("Failed to generate Exception"); + } catch (UnknownHostException e) { + assertEquals("Threw exception with incorrect message", "test", e + .getMessage()); + } + } + + /** + * Sets up the fixture, for example, open a network connection. This method + * is called before a test is executed. + */ + protected void setUp() { + } + + /** + * Tears down the fixture, for example, close a network connection. This + * method is called after a test is executed. + */ + protected void tearDown() { + } } Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownServiceExceptionTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownServiceExceptionTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownServiceExceptionTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/net/UnknownServiceExceptionTest.java Tue Mar 4 00:02:13 2008 @@ -17,53 +17,51 @@ package org.apache.harmony.luni.tests.java.net; -import java.net.URL; import java.net.UnknownServiceException; -public class UnknownServiceExceptionTest extends junit.framework.TestCase { +import junit.framework.TestCase; - /** - * @tests java.net.UnknownServiceException#UnknownServiceException() - */ - public void test_Constructor() throws Exception { - // Test for method java.net.UnknownServiceException() - try { - new URL("file://moo.txt").openConnection().getOutputStream(); - } catch (UnknownServiceException e) { - // correct - return; - } - - fail("Exception not thrown"); - } - - /** - * @tests java.net.UnknownServiceException#UnknownServiceException(java.lang.String) - */ - public void test_ConstructorLjava_lang_String() { - // Test for method java.net.UnknownServiceException(java.lang.String) - try { - if (true) - throw new UnknownServiceException("HelloWorld"); - } catch (UnknownServiceException e) { - assertTrue("Wrong exception message: " + e.toString(), e - .getMessage().equals("HelloWorld")); - return; - } - fail("Constructor failed"); - } - - /** - * Sets up the fixture, for example, open a network connection. This method - * is called before a test is executed. - */ - protected void setUp() { - } - - /** - * Tears down the fixture, for example, close a network connection. This - * method is called after a test is executed. - */ - protected void tearDown() { - } +public class UnknownServiceExceptionTest extends TestCase { + + /** + * @tests java.net.UnknownServiceException#UnknownServiceException() + */ + public void test_Constructor() { + try { + if (true) { + throw new UnknownServiceException(); + } + fail("Exception not thrown"); + } catch (UnknownServiceException e) { + // Expected + } + } + + /** + * @tests java.net.UnknownServiceException#UnknownServiceException(java.lang.String) + */ + public void test_ConstructorLjava_lang_String() { + try { + if (true) { + throw new UnknownServiceException("test"); + } + fail("Constructor failed"); + } catch (UnknownServiceException e) { + assertEquals("Wrong exception message", "test", e.getMessage()); + } + } + + /** + * Sets up the fixture, for example, open a network connection. This method + * is called before a test is executed. + */ + protected void setUp() { + } + + /** + * Tears down the fixture, for example, close a network connection. This + * method is called after a test is executed. + */ + protected void tearDown() { + } } Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/HashMapTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/HashMapTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/HashMapTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/HashMapTest.java Tue Mar 4 00:02:13 2008 @@ -1,674 +1,678 @@ -/* - * 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.harmony.luni.tests.java.util; - -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import org.apache.harmony.testframework.serialization.SerializationTest; - -import tests.support.Support_MapTest2; -import tests.support.Support_UnmodifiableCollectionTest; - -public class HashMapTest extends junit.framework.TestCase { - class MockMap extends AbstractMap { - public Set entrySet() { - return null; - } - public int size(){ - return 0; - } - } - - private static class MockMapNull extends AbstractMap { - public Set entrySet() { - return null; - } - - public int size() { - return 10; - } - } - - HashMap hm; - - final static int hmSize = 1000; - - static Object[] objArray; - - static Object[] objArray2; - { - objArray = new Object[hmSize]; - objArray2 = new Object[hmSize]; - for (int i = 0; i < objArray.length; i++) { - objArray[i] = new Integer(i); - objArray2[i] = objArray[i].toString(); - } - } - - /** - * @tests java.util.HashMap#HashMap() - */ - public void test_Constructor() { - // Test for method java.util.HashMap() - new Support_MapTest2(new HashMap()).runTest(); - - HashMap hm2 = new HashMap(); - assertEquals("Created incorrect HashMap", 0, hm2.size()); - } - - /** - * @tests java.util.HashMap#HashMap(int) - */ - public void test_ConstructorI() { - // Test for method java.util.HashMap(int) - HashMap hm2 = new HashMap(5); - assertEquals("Created incorrect HashMap", 0, hm2.size()); - try { - new HashMap(-1); - } catch (IllegalArgumentException e) { - return; - } - fail( - "Failed to throw IllegalArgumentException for initial capacity < 0"); - - HashMap empty = new HashMap(0); - assertNull("Empty hashmap access", empty.get("nothing")); - empty.put("something", "here"); - assertTrue("cannot get element", empty.get("something") == "here"); - } - - /** - * @tests java.util.HashMap#HashMap(int, float) - */ - public void test_ConstructorIF() { - // Test for method java.util.HashMap(int, float) - HashMap hm2 = new HashMap(5, (float) 0.5); - assertEquals("Created incorrect HashMap", 0, hm2.size()); - try { - new HashMap(0, 0); - } catch (IllegalArgumentException e) { - return; - } - fail( - "Failed to throw IllegalArgumentException for initial load factor <= 0"); - - HashMap empty = new HashMap(0, 0.75f); - assertNull("Empty hashtable access", empty.get("nothing")); - empty.put("something", "here"); - assertTrue("cannot get element", empty.get("something") == "here"); - } - - /** - * @tests java.util.HashMap#HashMap(java.util.Map) - */ - public void test_ConstructorLjava_util_Map() { - // Test for method java.util.HashMap(java.util.Map) - Map myMap = new TreeMap(); - for (int counter = 0; counter < hmSize; counter++) - myMap.put(objArray2[counter], objArray[counter]); - HashMap hm2 = new HashMap(myMap); - for (int counter = 0; counter < hmSize; counter++) - assertTrue("Failed to construct correct HashMap", hm - .get(objArray2[counter]) == hm2.get(objArray2[counter])); - - try { - Map mockMap = new MockMap(); - hm = new HashMap(mockMap); - fail("Should throw NullPointerException"); - } catch (NullPointerException e) { - //empty - } - - HashMap map = new HashMap(); - map.put("a", "a"); - SubMap map2 = new SubMap(map); - assertTrue(map2.containsKey("a")); - assertTrue(map2.containsValue("a")); - } - - /** - * @tests java.util.HashMap#clear() - */ - public void test_clear() { - hm.clear(); - assertEquals("Clear failed to reset size", 0, hm.size()); - for (int i = 0; i < hmSize; i++) - assertNull("Failed to clear all elements", - hm.get(objArray2[i])); - - // Check clear on a large loaded map of Integer keys - HashMap map = new HashMap(); - for (int i = -32767; i < 32768; i++) { - map.put(i, "foobar"); - } - map.clear(); - assertEquals("Failed to reset size on large integer map", 0, hm.size()); - for (int i = -32767; i < 32768; i++) { - assertNull("Failed to clear integer map values", map.get(i)); - } - } - - /** - * @tests java.util.HashMap#clone() - */ - public void test_clone() { - // Test for method java.lang.Object java.util.HashMap.clone() - HashMap hm2 = (HashMap) hm.clone(); - assertTrue("Clone answered equivalent HashMap", hm2 != hm); - for (int counter = 0; counter < hmSize; counter++) - assertTrue("Clone answered unequal HashMap", hm - .get(objArray2[counter]) == hm2.get(objArray2[counter])); - - HashMap map = new HashMap(); - map.put("key", "value"); - // get the keySet() and values() on the original Map - Set keys = map.keySet(); - Collection values = map.values(); - assertEquals("values() does not work", - "value", values.iterator().next()); - assertEquals("keySet() does not work", - "key", keys.iterator().next()); - AbstractMap map2 = (AbstractMap) map.clone(); - map2.put("key", "value2"); - Collection values2 = map2.values(); - assertTrue("values() is identical", values2 != values); - // values() and keySet() on the cloned() map should be different - assertEquals("values() was not cloned", - "value2", values2.iterator().next()); - map2.clear(); - map2.put("key2", "value3"); - Set key2 = map2.keySet(); - assertTrue("keySet() is identical", key2 != keys); - assertEquals("keySet() was not cloned", - "key2", key2.iterator().next()); - - // regresion test for HARMONY-4603 - HashMap hashmap = new HashMap(); - MockClonable mock = new MockClonable(1); - hashmap.put(1, mock); - assertEquals(1, ((MockClonable) hashmap.get(1)).i); - HashMap hm3 = (HashMap)hashmap.clone(); - assertEquals(1, ((MockClonable) hm3.get(1)).i); - mock.i = 0; - assertEquals(0, ((MockClonable) hashmap.get(1)).i); - assertEquals(0, ((MockClonable) hm3.get(1)).i); - } - - /** - * @tests java.util.HashMap#containsKey(java.lang.Object) - */ - public void test_containsKeyLjava_lang_Object() { - // Test for method boolean - // java.util.HashMap.containsKey(java.lang.Object) - assertTrue("Returned false for valid key", hm.containsKey(new Integer( - 876).toString())); - assertTrue("Returned true for invalid key", !hm.containsKey("KKDKDKD")); - - HashMap m = new HashMap(); - m.put(null, "test"); - assertTrue("Failed with null key", m.containsKey(null)); - assertTrue("Failed with missing key matching null hash", !m - .containsKey(new Integer(0))); - } - - /** - * @tests java.util.HashMap#containsValue(java.lang.Object) - */ - public void test_containsValueLjava_lang_Object() { - // Test for method boolean - // java.util.HashMap.containsValue(java.lang.Object) - assertTrue("Returned false for valid value", hm - .containsValue(new Integer(875))); - assertTrue("Returned true for invalid valie", !hm - .containsValue(new Integer(-9))); - } - - /** - * @tests java.util.HashMap#entrySet() - */ - public void test_entrySet() { - // Test for method java.util.Set java.util.HashMap.entrySet() - Set s = hm.entrySet(); - Iterator i = s.iterator(); - assertTrue("Returned set of incorrect size", hm.size() == s.size()); - while (i.hasNext()) { - Map.Entry m = (Map.Entry) i.next(); - assertTrue("Returned incorrect entry set", hm.containsKey(m - .getKey()) - && hm.containsValue(m.getValue())); - } - } - - /** - * @tests java.util.HashMap#get(java.lang.Object) - */ - public void test_getLjava_lang_Object() { - // Test for method java.lang.Object - // java.util.HashMap.get(java.lang.Object) - assertNull("Get returned non-null for non existent key", - hm.get("T")); - hm.put("T", "HELLO"); - assertEquals("Get returned incorrect value for existing key", "HELLO", hm.get("T") - ); - - HashMap m = new HashMap(); - m.put(null, "test"); - assertEquals("Failed with null key", "test", m.get(null)); - assertNull("Failed with missing key matching null hash", m - .get(new Integer(0))); - - // Regression for HARMONY-206 - ReusableKey k = new ReusableKey(); - HashMap map = new HashMap(); - k.setKey(1); - map.put(k, "value1"); - - k.setKey(18); - assertNull(map.get(k)); - - k.setKey(17); - assertNull(map.get(k)); - } - - /** - * @tests java.util.HashMap#isEmpty() - */ - public void test_isEmpty() { - // Test for method boolean java.util.HashMap.isEmpty() - assertTrue("Returned false for new map", new HashMap().isEmpty()); - assertTrue("Returned true for non-empty", !hm.isEmpty()); - } - - /** - * @tests java.util.HashMap#keySet() - */ - public void test_keySet() { - // Test for method java.util.Set java.util.HashMap.keySet() - Set s = hm.keySet(); - assertTrue("Returned set of incorrect size()", s.size() == hm.size()); - for (int i = 0; i < objArray.length; i++) - assertTrue("Returned set does not contain all keys", s - .contains(objArray[i].toString())); - - HashMap m = new HashMap(); - m.put(null, "test"); - assertTrue("Failed with null key", m.keySet().contains(null)); - assertNull("Failed with null key", m.keySet().iterator().next()); - - Map map = new HashMap(101); - map.put(new Integer(1), "1"); - map.put(new Integer(102), "102"); - map.put(new Integer(203), "203"); - Iterator it = map.keySet().iterator(); - Integer remove1 = (Integer) it.next(); - it.hasNext(); - it.remove(); - Integer remove2 = (Integer) it.next(); - it.remove(); - ArrayList list = new ArrayList(Arrays.asList(new Integer[] { - new Integer(1), new Integer(102), new Integer(203) })); - list.remove(remove1); - list.remove(remove2); - assertTrue("Wrong result", it.next().equals(list.get(0))); - assertEquals("Wrong size", 1, map.size()); - assertTrue("Wrong contents", map.keySet().iterator().next().equals( - list.get(0))); - - Map map2 = new HashMap(101); - map2.put(new Integer(1), "1"); - map2.put(new Integer(4), "4"); - Iterator it2 = map2.keySet().iterator(); - Integer remove3 = (Integer) it2.next(); - Integer next; - if (remove3.intValue() == 1) - next = new Integer(4); - else - next = new Integer(1); - it2.hasNext(); - it2.remove(); - assertTrue("Wrong result 2", it2.next().equals(next)); - assertEquals("Wrong size 2", 1, map2.size()); - assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals( - next)); - } - - /** - * @tests java.util.HashMap#put(java.lang.Object, java.lang.Object) - */ - public void test_putLjava_lang_ObjectLjava_lang_Object() { - hm.put("KEY", "VALUE"); - assertEquals("Failed to install key/value pair", "VALUE", hm.get("KEY")); - - HashMap m = new HashMap(); - m.put(new Short((short) 0), "short"); - m.put(null, "test"); - m.put(new Integer(0), "int"); - assertEquals("Failed adding to bucket containing null", "short", m - .get(new Short((short) 0))); - assertEquals("Failed adding to bucket containing null2", "int", m - .get(new Integer(0))); - - // Check my actual key instance is returned - HashMap map = new HashMap(); - for (int i = -32767; i < 32768; i++) { - map.put(i, "foobar"); - } - Integer myKey = new Integer(0); - // Put a new value at the old key position - map.put(myKey, "myValue"); - assertTrue(map.containsKey(myKey)); - assertEquals("myValue", map.get(myKey)); - boolean found = false; - for (Iterator itr = map.keySet().iterator(); itr.hasNext();) { - Integer key = itr.next(); - if (found = key == myKey) { - break; - } - } - assertFalse("Should not find new key instance in hashmap", found); - - // Add a new key instance and check it is returned - assertNotNull(map.remove(myKey)); - map.put(myKey, "myValue"); - assertTrue(map.containsKey(myKey)); - assertEquals("myValue", map.get(myKey)); - for (Iterator itr = map.keySet().iterator(); itr.hasNext();) { - Integer key = itr.next(); - if (found = key == myKey) { - break; - } - } - assertTrue("Did not find new key instance in hashmap", found); - - // Ensure keys with identical hashcode are stored separately - HashMap objmap = new HashMap(); - for (int i = 0; i < 32768; i++) { - objmap.put(i, "foobar"); - } - // Put non-equal object with same hashcode - MyKey aKey = new MyKey(); - assertNull(objmap.put(aKey, "value")); - assertNull(objmap.remove(new MyKey())); - assertEquals("foobar", objmap.get(0)); - assertEquals("value", objmap.get(aKey)); - } - - static class MyKey { - public MyKey() { - super(); - } - - public int hashCode() { - return 0; - } - } - /** - * @tests java.util.HashMap#putAll(java.util.Map) - */ - public void test_putAllLjava_util_Map() { - // Test for method void java.util.HashMap.putAll(java.util.Map) - HashMap hm2 = new HashMap(); - hm2.putAll(hm); - for (int i = 0; i < 1000; i++) - assertTrue("Failed to clear all elements", hm2.get( - new Integer(i).toString()).equals((new Integer(i)))); - - Map mockMap = new MockMap(); - hm2 = new HashMap(); - hm2.putAll(mockMap); - assertEquals("Size should be 0", 0, hm2.size()); - } - - /** - * @tests java.util.HashMap#putAll(java.util.Map) - */ - public void test_putAllLjava_util_Map_Null() { - HashMap hashMap = new HashMap(); - try { - hashMap.putAll(new MockMapNull()); - fail("Should throw NullPointerException"); - } catch (NullPointerException e) { - // expected. - } - - try { - hashMap = new HashMap(new MockMapNull()); - fail("Should throw NullPointerException"); - } catch (NullPointerException e) { - // expected. - } - } - - /** - * @tests java.util.HashMap#remove(java.lang.Object) - */ - public void test_removeLjava_lang_Object() { - int size = hm.size(); - Integer y = new Integer(9); - Integer x = ((Integer) hm.remove(y.toString())); - assertTrue("Remove returned incorrect value", x.equals(new Integer(9))); - assertNull("Failed to remove given key", hm.get(new Integer(9))); - assertTrue("Failed to decrement size", hm.size() == (size - 1)); - assertNull("Remove of non-existent key returned non-null", hm - .remove("LCLCLC")); - - HashMap m = new HashMap(); - m.put(null, "test"); - assertNull("Failed with same hash as null", - m.remove(new Integer(0))); - assertEquals("Failed with null key", "test", m.remove(null)); - - HashMap map = new HashMap(); - for (int i = 0; i < 32768; i++) { - map.put(i, "const"); - } - Object[] values = new Object[32768]; - for (int i = 0; i < 32768; i++) { - values[i] = new Object(); - map.put(i, values[i]); - } - for (int i = 32767; i >= 0; i--) { - assertEquals("Failed to remove same value", values[i], map.remove(i)); - } - - // Ensure keys with identical hashcode are removed properly - map = new HashMap(); - for (int i = -32767; i < 32768; i++) { - map.put(i, "foobar"); - } - // Remove non equal object with same hashcode - assertNull(map.remove(new MyKey())); - assertEquals("foobar", map.get(0)); - map.remove(0); - assertNull(map.get(0)); - } - - /** - * @tests java.util.HashMap#size() - */ - public void test_size() { - // Test for method int java.util.HashMap.size() - assertTrue("Returned incorrect size", - hm.size() == (objArray.length + 2)); - } - - /** - * @tests java.util.HashMap#values() - */ - public void test_values() { - // Test for method java.util.Collection java.util.HashMap.values() - Collection c = hm.values(); - assertTrue("Returned collection of incorrect size()", c.size() == hm - .size()); - for (int i = 0; i < objArray.length; i++) - assertTrue("Returned collection does not contain all keys", c - .contains(objArray[i])); - - HashMap myHashMap = new HashMap(); - for (int i = 0; i < 100; i++) - myHashMap.put(objArray2[i], objArray[i]); - Collection values = myHashMap.values(); - new Support_UnmodifiableCollectionTest( - "Test Returned Collection From HashMap.values()", values) - .runTest(); - values.remove(new Integer(0)); - assertTrue( - "Removing from the values collection should remove from the original map", - !myHashMap.containsValue(new Integer(0))); - - } - - static class ReusableKey { - private int key = 0; - - public void setKey(int key) { - this.key = key; - } - - public int hashCode() { - return key; - } - - public boolean equals(Object o) { - if (o == this) { - return true; - } - if (!(o instanceof ReusableKey)) { - return false; - } - return key == ((ReusableKey) o).key; - } - } - - public void test_Map_Entry_hashCode() { - //Related to HARMONY-403 - HashMap map = new HashMap(10); - Integer key = new Integer(1); - Integer val = new Integer(2); - map.put(key, val); - int expected = key.hashCode() ^ val.hashCode(); - assertEquals(expected, map.hashCode()); - key = new Integer(4); - val = new Integer(8); - map.put(key, val); - expected += key.hashCode() ^ val.hashCode(); - assertEquals(expected, map.hashCode()); - } - - class MockClonable implements Cloneable{ - public int i; - - public MockClonable(int i) { - this.i = i; - } - - @Override - protected Object clone() throws CloneNotSupportedException { - return new MockClonable(i); - } - } - - /* - * Regression test for HY-4750 - */ - public void test_EntrySet() { - HashMap map = new HashMap(); - map.put(new Integer(1), "ONE"); - - Set entrySet = map.entrySet(); - Iterator e = entrySet.iterator(); - Object real = e.next(); - Map.Entry copyEntry = new MockEntry(); - assertEquals(real, copyEntry); - assertTrue(entrySet.contains(copyEntry)); - - entrySet.remove(copyEntry); - assertFalse(entrySet.contains(copyEntry)); - } - - private static class MockEntry implements Map.Entry { - - public Object getKey() { - return new Integer(1); - } - - public Object getValue() { - return "ONE"; - } - - public Object setValue(Object object) { - return null; - } - } - - /** - * Sets up the fixture, for example, open a network connection. This method - * is called before a test is executed. - */ - protected void setUp() { - hm = new HashMap(); - for (int i = 0; i < objArray.length; i++) - hm.put(objArray2[i], objArray[i]); - hm.put("test", null); - hm.put(null, "test"); - } - - - class SubMap extends HashMap { - public SubMap(Map m) { - super(m); - } - - public V put(K key, V value) { - throw new UnsupportedOperationException(); - } - } - - /** - * @tests serialization/deserialization. - */ - public void testSerializationSelf() throws Exception { - HashMap hm = new HashMap(); - hm.put("key", "value"); - - SerializationTest.verifySelf(hm); - - // regression for HARMONY-1583 - hm.put(null, "null"); - SerializationTest.verifySelf(hm); - } - - /** - * @tests serialization/deserialization compatibility with RI. - */ - public void testSerializationCompatibility() throws Exception { - HashMap hm = new HashMap(); - hm.put("key", "value"); - - SerializationTest.verifyGolden(this, hm); - } - -} +/* + * 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.harmony.luni.tests.java.util; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import org.apache.harmony.testframework.serialization.SerializationTest; + +import tests.support.Support_MapTest2; +import tests.support.Support_UnmodifiableCollectionTest; + +public class HashMapTest extends junit.framework.TestCase { + class MockMap extends AbstractMap { + public Set entrySet() { + return null; + } + public int size(){ + return 0; + } + } + + private static class MockMapNull extends AbstractMap { + public Set entrySet() { + return null; + } + + public int size() { + return 10; + } + } + + HashMap hm; + + final static int hmSize = 1000; + + static Object[] objArray; + + static Object[] objArray2; + { + objArray = new Object[hmSize]; + objArray2 = new Object[hmSize]; + for (int i = 0; i < objArray.length; i++) { + objArray[i] = new Integer(i); + objArray2[i] = objArray[i].toString(); + } + } + + /** + * @tests java.util.HashMap#HashMap() + */ + public void test_Constructor() { + // Test for method java.util.HashMap() + new Support_MapTest2(new HashMap()).runTest(); + + HashMap hm2 = new HashMap(); + assertEquals("Created incorrect HashMap", 0, hm2.size()); + } + + /** + * @tests java.util.HashMap#HashMap(int) + */ + public void test_ConstructorI() { + // Test for method java.util.HashMap(int) + HashMap hm2 = new HashMap(5); + assertEquals("Created incorrect HashMap", 0, hm2.size()); + try { + new HashMap(-1); + } catch (IllegalArgumentException e) { + return; + } + fail( + "Failed to throw IllegalArgumentException for initial capacity < 0"); + + HashMap empty = new HashMap(0); + assertNull("Empty hashmap access", empty.get("nothing")); + empty.put("something", "here"); + assertTrue("cannot get element", empty.get("something") == "here"); + } + + /** + * @tests java.util.HashMap#HashMap(int, float) + */ + public void test_ConstructorIF() { + // Test for method java.util.HashMap(int, float) + HashMap hm2 = new HashMap(5, (float) 0.5); + assertEquals("Created incorrect HashMap", 0, hm2.size()); + try { + new HashMap(0, 0); + } catch (IllegalArgumentException e) { + return; + } + fail( + "Failed to throw IllegalArgumentException for initial load factor <= 0"); + + HashMap empty = new HashMap(0, 0.75f); + assertNull("Empty hashtable access", empty.get("nothing")); + empty.put("something", "here"); + assertTrue("cannot get element", empty.get("something") == "here"); + } + + /** + * @tests java.util.HashMap#HashMap(java.util.Map) + */ + public void test_ConstructorLjava_util_Map() { + // Test for method java.util.HashMap(java.util.Map) + Map myMap = new TreeMap(); + for (int counter = 0; counter < hmSize; counter++) + myMap.put(objArray2[counter], objArray[counter]); + HashMap hm2 = new HashMap(myMap); + for (int counter = 0; counter < hmSize; counter++) + assertTrue("Failed to construct correct HashMap", hm + .get(objArray2[counter]) == hm2.get(objArray2[counter])); + + try { + Map mockMap = new MockMap(); + hm = new HashMap(mockMap); + fail("Should throw NullPointerException"); + } catch (NullPointerException e) { + //empty + } + + HashMap map = new HashMap(); + map.put("a", "a"); + SubMap map2 = new SubMap(map); + assertTrue(map2.containsKey("a")); + assertTrue(map2.containsValue("a")); + } + + /** + * @tests java.util.HashMap#clear() + */ + public void test_clear() { + hm.clear(); + assertEquals("Clear failed to reset size", 0, hm.size()); + for (int i = 0; i < hmSize; i++) + assertNull("Failed to clear all elements", + hm.get(objArray2[i])); + + // Check clear on a large loaded map of Integer keys + HashMap map = new HashMap(); + for (int i = -32767; i < 32768; i++) { + map.put(i, "foobar"); + } + map.clear(); + assertEquals("Failed to reset size on large integer map", 0, hm.size()); + for (int i = -32767; i < 32768; i++) { + assertNull("Failed to clear integer map values", map.get(i)); + } + } + + /** + * @tests java.util.HashMap#clone() + */ + public void test_clone() { + // Test for method java.lang.Object java.util.HashMap.clone() + HashMap hm2 = (HashMap) hm.clone(); + assertTrue("Clone answered equivalent HashMap", hm2 != hm); + for (int counter = 0; counter < hmSize; counter++) + assertTrue("Clone answered unequal HashMap", hm + .get(objArray2[counter]) == hm2.get(objArray2[counter])); + + HashMap map = new HashMap(); + map.put("key", "value"); + // get the keySet() and values() on the original Map + Set keys = map.keySet(); + Collection values = map.values(); + assertEquals("values() does not work", + "value", values.iterator().next()); + assertEquals("keySet() does not work", + "key", keys.iterator().next()); + AbstractMap map2 = (AbstractMap) map.clone(); + map2.put("key", "value2"); + Collection values2 = map2.values(); + assertTrue("values() is identical", values2 != values); + // values() and keySet() on the cloned() map should be different + assertEquals("values() was not cloned", + "value2", values2.iterator().next()); + map2.clear(); + map2.put("key2", "value3"); + Set key2 = map2.keySet(); + assertTrue("keySet() is identical", key2 != keys); + assertEquals("keySet() was not cloned", + "key2", key2.iterator().next()); + + // regresion test for HARMONY-4603 + HashMap hashmap = new HashMap(); + MockClonable mock = new MockClonable(1); + hashmap.put(1, mock); + assertEquals(1, ((MockClonable) hashmap.get(1)).i); + HashMap hm3 = (HashMap)hashmap.clone(); + assertEquals(1, ((MockClonable) hm3.get(1)).i); + mock.i = 0; + assertEquals(0, ((MockClonable) hashmap.get(1)).i); + assertEquals(0, ((MockClonable) hm3.get(1)).i); + } + + /** + * @tests java.util.HashMap#containsKey(java.lang.Object) + */ + public void test_containsKeyLjava_lang_Object() { + // Test for method boolean + // java.util.HashMap.containsKey(java.lang.Object) + assertTrue("Returned false for valid key", hm.containsKey(new Integer( + 876).toString())); + assertTrue("Returned true for invalid key", !hm.containsKey("KKDKDKD")); + + HashMap m = new HashMap(); + m.put(null, "test"); + assertTrue("Failed with null key", m.containsKey(null)); + assertTrue("Failed with missing key matching null hash", !m + .containsKey(new Integer(0))); + } + + /** + * @tests java.util.HashMap#containsValue(java.lang.Object) + */ + public void test_containsValueLjava_lang_Object() { + // Test for method boolean + // java.util.HashMap.containsValue(java.lang.Object) + assertTrue("Returned false for valid value", hm + .containsValue(new Integer(875))); + assertTrue("Returned true for invalid valie", !hm + .containsValue(new Integer(-9))); + } + + /** + * @tests java.util.HashMap#entrySet() + */ + public void test_entrySet() { + // Test for method java.util.Set java.util.HashMap.entrySet() + Set s = hm.entrySet(); + Iterator i = s.iterator(); + assertTrue("Returned set of incorrect size", hm.size() == s.size()); + while (i.hasNext()) { + Map.Entry m = (Map.Entry) i.next(); + assertTrue("Returned incorrect entry set", hm.containsKey(m + .getKey()) + && hm.containsValue(m.getValue())); + } + + Iterator iter = s.iterator(); + s.remove(iter.next()); + assertEquals(1001, s.size()); + } + + /** + * @tests java.util.HashMap#get(java.lang.Object) + */ + public void test_getLjava_lang_Object() { + // Test for method java.lang.Object + // java.util.HashMap.get(java.lang.Object) + assertNull("Get returned non-null for non existent key", + hm.get("T")); + hm.put("T", "HELLO"); + assertEquals("Get returned incorrect value for existing key", "HELLO", hm.get("T") + ); + + HashMap m = new HashMap(); + m.put(null, "test"); + assertEquals("Failed with null key", "test", m.get(null)); + assertNull("Failed with missing key matching null hash", m + .get(new Integer(0))); + + // Regression for HARMONY-206 + ReusableKey k = new ReusableKey(); + HashMap map = new HashMap(); + k.setKey(1); + map.put(k, "value1"); + + k.setKey(18); + assertNull(map.get(k)); + + k.setKey(17); + assertNull(map.get(k)); + } + + /** + * @tests java.util.HashMap#isEmpty() + */ + public void test_isEmpty() { + // Test for method boolean java.util.HashMap.isEmpty() + assertTrue("Returned false for new map", new HashMap().isEmpty()); + assertTrue("Returned true for non-empty", !hm.isEmpty()); + } + + /** + * @tests java.util.HashMap#keySet() + */ + public void test_keySet() { + // Test for method java.util.Set java.util.HashMap.keySet() + Set s = hm.keySet(); + assertTrue("Returned set of incorrect size()", s.size() == hm.size()); + for (int i = 0; i < objArray.length; i++) + assertTrue("Returned set does not contain all keys", s + .contains(objArray[i].toString())); + + HashMap m = new HashMap(); + m.put(null, "test"); + assertTrue("Failed with null key", m.keySet().contains(null)); + assertNull("Failed with null key", m.keySet().iterator().next()); + + Map map = new HashMap(101); + map.put(new Integer(1), "1"); + map.put(new Integer(102), "102"); + map.put(new Integer(203), "203"); + Iterator it = map.keySet().iterator(); + Integer remove1 = (Integer) it.next(); + it.hasNext(); + it.remove(); + Integer remove2 = (Integer) it.next(); + it.remove(); + ArrayList list = new ArrayList(Arrays.asList(new Integer[] { + new Integer(1), new Integer(102), new Integer(203) })); + list.remove(remove1); + list.remove(remove2); + assertTrue("Wrong result", it.next().equals(list.get(0))); + assertEquals("Wrong size", 1, map.size()); + assertTrue("Wrong contents", map.keySet().iterator().next().equals( + list.get(0))); + + Map map2 = new HashMap(101); + map2.put(new Integer(1), "1"); + map2.put(new Integer(4), "4"); + Iterator it2 = map2.keySet().iterator(); + Integer remove3 = (Integer) it2.next(); + Integer next; + if (remove3.intValue() == 1) + next = new Integer(4); + else + next = new Integer(1); + it2.hasNext(); + it2.remove(); + assertTrue("Wrong result 2", it2.next().equals(next)); + assertEquals("Wrong size 2", 1, map2.size()); + assertTrue("Wrong contents 2", map2.keySet().iterator().next().equals( + next)); + } + + /** + * @tests java.util.HashMap#put(java.lang.Object, java.lang.Object) + */ + public void test_putLjava_lang_ObjectLjava_lang_Object() { + hm.put("KEY", "VALUE"); + assertEquals("Failed to install key/value pair", "VALUE", hm.get("KEY")); + + HashMap m = new HashMap(); + m.put(new Short((short) 0), "short"); + m.put(null, "test"); + m.put(new Integer(0), "int"); + assertEquals("Failed adding to bucket containing null", "short", m + .get(new Short((short) 0))); + assertEquals("Failed adding to bucket containing null2", "int", m + .get(new Integer(0))); + + // Check my actual key instance is returned + HashMap map = new HashMap(); + for (int i = -32767; i < 32768; i++) { + map.put(i, "foobar"); + } + Integer myKey = new Integer(0); + // Put a new value at the old key position + map.put(myKey, "myValue"); + assertTrue(map.containsKey(myKey)); + assertEquals("myValue", map.get(myKey)); + boolean found = false; + for (Iterator itr = map.keySet().iterator(); itr.hasNext();) { + Integer key = itr.next(); + if (found = key == myKey) { + break; + } + } + assertFalse("Should not find new key instance in hashmap", found); + + // Add a new key instance and check it is returned + assertNotNull(map.remove(myKey)); + map.put(myKey, "myValue"); + assertTrue(map.containsKey(myKey)); + assertEquals("myValue", map.get(myKey)); + for (Iterator itr = map.keySet().iterator(); itr.hasNext();) { + Integer key = itr.next(); + if (found = key == myKey) { + break; + } + } + assertTrue("Did not find new key instance in hashmap", found); + + // Ensure keys with identical hashcode are stored separately + HashMap objmap = new HashMap(); + for (int i = 0; i < 32768; i++) { + objmap.put(i, "foobar"); + } + // Put non-equal object with same hashcode + MyKey aKey = new MyKey(); + assertNull(objmap.put(aKey, "value")); + assertNull(objmap.remove(new MyKey())); + assertEquals("foobar", objmap.get(0)); + assertEquals("value", objmap.get(aKey)); + } + + static class MyKey { + public MyKey() { + super(); + } + + public int hashCode() { + return 0; + } + } + /** + * @tests java.util.HashMap#putAll(java.util.Map) + */ + public void test_putAllLjava_util_Map() { + // Test for method void java.util.HashMap.putAll(java.util.Map) + HashMap hm2 = new HashMap(); + hm2.putAll(hm); + for (int i = 0; i < 1000; i++) + assertTrue("Failed to clear all elements", hm2.get( + new Integer(i).toString()).equals((new Integer(i)))); + + Map mockMap = new MockMap(); + hm2 = new HashMap(); + hm2.putAll(mockMap); + assertEquals("Size should be 0", 0, hm2.size()); + } + + /** + * @tests java.util.HashMap#putAll(java.util.Map) + */ + public void test_putAllLjava_util_Map_Null() { + HashMap hashMap = new HashMap(); + try { + hashMap.putAll(new MockMapNull()); + fail("Should throw NullPointerException"); + } catch (NullPointerException e) { + // expected. + } + + try { + hashMap = new HashMap(new MockMapNull()); + fail("Should throw NullPointerException"); + } catch (NullPointerException e) { + // expected. + } + } + + /** + * @tests java.util.HashMap#remove(java.lang.Object) + */ + public void test_removeLjava_lang_Object() { + int size = hm.size(); + Integer y = new Integer(9); + Integer x = ((Integer) hm.remove(y.toString())); + assertTrue("Remove returned incorrect value", x.equals(new Integer(9))); + assertNull("Failed to remove given key", hm.get(new Integer(9))); + assertTrue("Failed to decrement size", hm.size() == (size - 1)); + assertNull("Remove of non-existent key returned non-null", hm + .remove("LCLCLC")); + + HashMap m = new HashMap(); + m.put(null, "test"); + assertNull("Failed with same hash as null", + m.remove(new Integer(0))); + assertEquals("Failed with null key", "test", m.remove(null)); + + HashMap map = new HashMap(); + for (int i = 0; i < 32768; i++) { + map.put(i, "const"); + } + Object[] values = new Object[32768]; + for (int i = 0; i < 32768; i++) { + values[i] = new Object(); + map.put(i, values[i]); + } + for (int i = 32767; i >= 0; i--) { + assertEquals("Failed to remove same value", values[i], map.remove(i)); + } + + // Ensure keys with identical hashcode are removed properly + map = new HashMap(); + for (int i = -32767; i < 32768; i++) { + map.put(i, "foobar"); + } + // Remove non equal object with same hashcode + assertNull(map.remove(new MyKey())); + assertEquals("foobar", map.get(0)); + map.remove(0); + assertNull(map.get(0)); + } + + /** + * @tests java.util.HashMap#size() + */ + public void test_size() { + // Test for method int java.util.HashMap.size() + assertTrue("Returned incorrect size", + hm.size() == (objArray.length + 2)); + } + + /** + * @tests java.util.HashMap#values() + */ + public void test_values() { + // Test for method java.util.Collection java.util.HashMap.values() + Collection c = hm.values(); + assertTrue("Returned collection of incorrect size()", c.size() == hm + .size()); + for (int i = 0; i < objArray.length; i++) + assertTrue("Returned collection does not contain all keys", c + .contains(objArray[i])); + + HashMap myHashMap = new HashMap(); + for (int i = 0; i < 100; i++) + myHashMap.put(objArray2[i], objArray[i]); + Collection values = myHashMap.values(); + new Support_UnmodifiableCollectionTest( + "Test Returned Collection From HashMap.values()", values) + .runTest(); + values.remove(new Integer(0)); + assertTrue( + "Removing from the values collection should remove from the original map", + !myHashMap.containsValue(new Integer(0))); + + } + + static class ReusableKey { + private int key = 0; + + public void setKey(int key) { + this.key = key; + } + + public int hashCode() { + return key; + } + + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof ReusableKey)) { + return false; + } + return key == ((ReusableKey) o).key; + } + } + + public void test_Map_Entry_hashCode() { + //Related to HARMONY-403 + HashMap map = new HashMap(10); + Integer key = new Integer(1); + Integer val = new Integer(2); + map.put(key, val); + int expected = key.hashCode() ^ val.hashCode(); + assertEquals(expected, map.hashCode()); + key = new Integer(4); + val = new Integer(8); + map.put(key, val); + expected += key.hashCode() ^ val.hashCode(); + assertEquals(expected, map.hashCode()); + } + + class MockClonable implements Cloneable{ + public int i; + + public MockClonable(int i) { + this.i = i; + } + + @Override + protected Object clone() throws CloneNotSupportedException { + return new MockClonable(i); + } + } + + /* + * Regression test for HY-4750 + */ + public void test_EntrySet() { + HashMap map = new HashMap(); + map.put(new Integer(1), "ONE"); + + Set entrySet = map.entrySet(); + Iterator e = entrySet.iterator(); + Object real = e.next(); + Map.Entry copyEntry = new MockEntry(); + assertEquals(real, copyEntry); + assertTrue(entrySet.contains(copyEntry)); + + entrySet.remove(copyEntry); + assertFalse(entrySet.contains(copyEntry)); + } + + private static class MockEntry implements Map.Entry { + + public Object getKey() { + return new Integer(1); + } + + public Object getValue() { + return "ONE"; + } + + public Object setValue(Object object) { + return null; + } + } + + /** + * Sets up the fixture, for example, open a network connection. This method + * is called before a test is executed. + */ + protected void setUp() { + hm = new HashMap(); + for (int i = 0; i < objArray.length; i++) + hm.put(objArray2[i], objArray[i]); + hm.put("test", null); + hm.put(null, "test"); + } + + + class SubMap extends HashMap { + public SubMap(Map m) { + super(m); + } + + public V put(K key, V value) { + throw new UnsupportedOperationException(); + } + } + + /** + * @tests serialization/deserialization. + */ + public void testSerializationSelf() throws Exception { + HashMap hm = new HashMap(); + hm.put("key", "value"); + + SerializationTest.verifySelf(hm); + + // regression for HARMONY-1583 + hm.put(null, "null"); + SerializationTest.verifySelf(hm); + } + + /** + * @tests serialization/deserialization compatibility with RI. + */ + public void testSerializationCompatibility() throws Exception { + HashMap hm = new HashMap(); + hm.put("key", "value"); + + SerializationTest.verifyGolden(this, hm); + } + +} Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/LocaleTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/LocaleTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/LocaleTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/LocaleTest.java Tue Mar 4 00:02:13 2008 @@ -358,9 +358,9 @@ // Non-bug difference for HARMONY-5442 l = new Locale("", "CA", "var"); - assertEquals("Wrong representation 2.5", "_CA_VAR", l.toString()); + assertEquals("Wrong representation 2.5", "_CA_var", l.toString()); l = new Locale("en", "", "WIN"); - assertEquals("Wrong representation 4", "en_WIN", l.toString()); + assertEquals("Wrong representation 4", "en__WIN", l.toString()); l = new Locale("en", "CA"); assertEquals("Wrong representation 6", "en_CA", l.toString()); l = new Locale("en", "CA", "VAR"); Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/PropertiesTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/PropertiesTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/PropertiesTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/PropertiesTest.java Tue Mar 4 00:02:13 2008 @@ -334,6 +334,44 @@ } assertEquals("Failed to load when last line contains a comment", "1", prop.get("fred")); + + // Regression tests for HARMONY-5414 + prop = new Properties(); + prop.load(new ByteArrayInputStream("a=\\u1234z".getBytes())); + + prop = new Properties(); + try { + prop.load(new ByteArrayInputStream("a=\\u123".getBytes())); + fail("Expected IllegalArgumentException due to invalid Unicode sequence"); + } catch (IllegalArgumentException e) { + // Expected + } + + prop = new Properties(); + try { + prop.load(new ByteArrayInputStream("a=\\u123z".getBytes())); + fail("Expected IllegalArgumentException due to invalid unicode sequence"); + } catch (IllegalArgumentException expected) { + // Expected + } + + prop = new Properties(); + Properties expected = new Properties(); + expected.put("a", "\u0000"); + prop.load(new ByteArrayInputStream("a=\\".getBytes())); + assertEquals("Failed to read trailing slash value", expected, prop); + + prop = new Properties(); + expected = new Properties(); + expected.put("a", "\u1234\u0000"); + prop.load(new ByteArrayInputStream("a=\\u1234\\".getBytes())); + assertEquals("Failed to read trailing slash value #2", expected, prop); + + prop = new Properties(); + expected = new Properties(); + expected.put("a", "q"); + prop.load(new ByteArrayInputStream("a=\\q".getBytes())); + assertEquals("Failed to read slash value #3", expected, prop); } /** Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ScannerTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ScannerTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ScannerTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/ScannerTest.java Tue Mar 4 00:02:13 2008 @@ -5585,6 +5585,23 @@ s = new Scanner("test\n "); result = s.nextLine(); assertEquals("test", result); + + // Regression test for Harmony-4774 + class CountReadable implements Readable { + int counter = 0; + public int read(CharBuffer charBuffer) throws IOException { + counter++; + charBuffer.append("hello\n"); + return 6; + } + } + CountReadable cr = new CountReadable(); + s = new Scanner(cr); + result = s.nextLine(); + // We expect read() to be called only once, otherwise we see the problem + // when reading from System.in described in Harmony-4774 + assertEquals(1, cr.counter); + assertEquals("hello", result); } /** Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/SimpleTimeZoneTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/SimpleTimeZoneTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/SimpleTimeZoneTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/SimpleTimeZoneTest.java Tue Mar 4 00:02:13 2008 @@ -198,6 +198,13 @@ assertEquals("Incorrect offset returned", -(5 * 60 * 60 * 1000), st1 .getOffset(GregorianCalendar.AD, 1998, Calendar.JUNE, 11, Calendar.THURSDAY, 0)); + + // Regression for HARMONY-5459 + st1 = (TimeZone)TimeZone.getDefault(); + int fourHours = 4*60*60*1000; + st1.setRawOffset(fourHours); + assertEquals(fourHours, st1.getOffset(1, 2099, 01, 1, 5, 0)); + } /** Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/TimeZoneTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/TimeZoneTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/TimeZoneTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/org/apache/harmony/luni/tests/java/util/TimeZoneTest.java Tue Mar 4 00:02:13 2008 @@ -18,7 +18,9 @@ package org.apache.harmony.luni.tests.java.util; import java.util.Calendar; +import java.util.Formatter; import java.util.GregorianCalendar; +import java.util.Locale; import java.util.SimpleTimeZone; import java.util.TimeZone; @@ -161,7 +163,31 @@ assertEquals("default not restored", oldDefault, TimeZone.getDefault()); } - + + /** + * @tests java.util.TimeZone#getDisplayName(java.util.Locale) + */ + public void test_getDisplayNameLjava_util_Locale() { + TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai"); + assertEquals("\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", timezone + .getDisplayName(Locale.CHINA)); + } + + /** + * @tests java.util.TimeZone#getDisplayName(boolean, int, java.util.Locale) + */ + public void test_getDisplayNameZILjava_util_Locale() { + TimeZone timezone = TimeZone.getTimeZone("Asia/Shanghai"); + assertEquals("GMT+0800", timezone.getDisplayName(false, TimeZone.SHORT, + Locale.CHINA)); + try { + timezone.getDisplayName(false, 100, Locale.CHINA); + fail("should throw IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + protected void setUp() { } Modified: harmony/enhanced/classlib/branches/java6/modules/nio/build.xml URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/build.xml?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/build.xml (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/build.xml Tue Mar 4 00:02:13 2008 @@ -40,17 +40,17 @@ + to="\1.java" /> + to="\1.java" /> - + @@ -65,7 +65,8 @@ - + @@ -74,9 +75,9 @@ - + - + @@ -93,33 +94,32 @@ - + + target="clean" /> - + destdir="${hy.build}" + compiler="${hy.javac.compiler}" + memoryMaximumSize="${hy.javac.maxmem}" + source="${hy.javac.source}" + target="${hy.javac.target}" + debug="${hy.javac.debug}"> - + @@ -142,22 +142,22 @@ + manifest="${hy.nio}/META-INF/MANIFEST.MF"> - + - + - + - + @@ -170,29 +170,29 @@ sourcepath="" compiler="${hy.javac.compiler}" memoryMaximumSize="${hy.javac.maxmem}" - source="${hy.javac.source}" + source="${hy.javac.source}" target="${hy.javac.target}" debug="${hy.javac.debug}"> - - - - + + + + - - - + + + - + @@ -201,14 +201,14 @@ + forkmode="${hy.test.forkmode}" + timeout="${hy.test.timeout}" + printsummary="withOutAndErr" + errorproperty="test.errors" + failureproperty="test.failures" + showoutput="on" + dir="${basedir}" + jvm="${test.jre.home}/bin/java"> @@ -218,20 +218,22 @@ - + - + - + Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/ByteBuffer.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/ByteBuffer.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/ByteBuffer.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/ByteBuffer.java Tue Mar 4 00:02:13 2008 @@ -262,7 +262,7 @@ /** * Returns a readonly buffer that shares content with this buffer. *

- * The returned buffer is guaranteed to be a new instance, even this buffer + * The returned buffer is guaranteed to be a new instance, even if this buffer * is readonly itself. The new buffer's position, limit, capacity and mark * are the same as this buffer. *

Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Channels.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Channels.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Channels.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Channels.java Tue Mar 4 00:02:13 2008 @@ -487,11 +487,6 @@ private ByteBuffer byteBuf; - /** - * @param outputStream - * @param enc - * @param minBufferCap - */ public ByteChannelWriter(OutputStream aOutputStream, CharsetEncoder aEncoder, int minBufferCap) { super(aOutputStream); Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/DatagramChannel.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/DatagramChannel.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/DatagramChannel.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/DatagramChannel.java Tue Mar 4 00:02:13 2008 @@ -83,6 +83,7 @@ * @see java.nio.channels.SelectableChannel#validOps() * @return Valid operations in bit-set. */ + @Override public final int validOps() { return (SelectionKey.OP_READ | SelectionKey.OP_WRITE); } Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/FileLock.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/FileLock.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/FileLock.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/FileLock.java Tue Mar 4 00:02:13 2008 @@ -191,6 +191,7 @@ * * @return the display string. */ + @Override @SuppressWarnings("nls") public final String toString() { StringBuffer buffer = new StringBuffer(64); // Guess length of string Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Pipe.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Pipe.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Pipe.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/Pipe.java Tue Mar 4 00:02:13 2008 @@ -24,7 +24,6 @@ * A pipe contains two channels. One is the writable sink channel and the other is * readable source channel. When bytes are written into the writable channel they * can be read from readable channel. The order of these bytes remains unchanged. - * */ public abstract class Pipe { @@ -49,6 +48,7 @@ * * @return a static value of OP_WRITE */ + @Override public final int validOps() { return SelectionKey.OP_WRITE; } @@ -76,6 +76,7 @@ * * @return a static value of OP_READ */ + @Override public final int validOps() { return SelectionKey.OP_READ; } Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/ServerSocketChannel.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/ServerSocketChannel.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/ServerSocketChannel.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/ServerSocketChannel.java Tue Mar 4 00:02:13 2008 @@ -70,6 +70,7 @@ * @see java.nio.channels.SelectableChannel#validOps() * @return Valid operations in bit-set. */ + @Override public final int validOps() { return SelectionKey.OP_ACCEPT; } Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/SocketChannel.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/SocketChannel.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/SocketChannel.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/SocketChannel.java Tue Mar 4 00:02:13 2008 @@ -135,6 +135,7 @@ * @see java.nio.channels.SelectableChannel#validOps() * @return Valid operations in bit-set. */ + @Override public final int validOps() { return (SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE); } Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelectionKey.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelectionKey.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelectionKey.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelectionKey.java Tue Mar 4 00:02:13 2008 @@ -41,6 +41,7 @@ /** * @see java.nio.channels.SelectionKey#isValid() */ + @Override public final boolean isValid() { return isValid; } @@ -50,6 +51,7 @@ * * @see java.nio.channels.SelectionKey#cancel() */ + @Override public final void cancel() { if (isValid) { isValid = false; Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelector.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelector.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelector.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/java/nio/channels/spi/AbstractSelector.java Tue Mar 4 00:02:13 2008 @@ -57,6 +57,7 @@ * * @see java.nio.channels.Selector#close() */ + @Override public synchronized final void close() throws IOException { if (isOpen) { isOpen = false; @@ -75,6 +76,7 @@ /** * @see java.nio.channels.Selector#isOpen() */ + @Override public final boolean isOpen() { return isOpen; } @@ -84,6 +86,7 @@ * * @see java.nio.channels.Selector#provider() */ + @Override public final SelectorProvider provider() { return provider; } Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/AddressUtil.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/AddressUtil.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/AddressUtil.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/AddressUtil.java Tue Mar 4 00:02:13 2008 @@ -19,6 +19,10 @@ import java.io.FileDescriptor; import java.nio.Buffer; import java.nio.channels.Channel; +import java.nio.channels.DatagramChannel; +import java.nio.channels.FileChannel; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; import org.apache.harmony.luni.platform.FileDescriptorHandler; import org.apache.harmony.nio.internal.DirectBuffer; @@ -49,14 +53,15 @@ } /** - * Gets the address of native resource held by the given channel, if has + * Gets the address of native resource held by the given channel, if it has * any. * - * For network related channel, including SocketChannel, ServerSocketChannel - * and DatagramChannel, this method returns a int of Socket handler in Linux - * while returns a SOCKET (UINT_PTR) in windows. + * For network related channel, including {@link SocketChannel}, + * {@link ServerSocketChannel} and {@link DatagramChannel}, this method + * returns the Socket handle (long) in Linux, and returns a SOCKET + * (UINT_PTR) in windows. * - * For FileChannel, this method returns the native file descriptor. + * For {@link FileChannel}, this method returns the native file descriptor. * * For other channels, this method return 0, which means unsupported * operation. Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/FileLockImpl.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/FileLockImpl.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/FileLockImpl.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/FileLockImpl.java Tue Mar 4 00:02:13 2008 @@ -21,7 +21,7 @@ import java.nio.channels.FileChannel; import java.nio.channels.FileLock; -/* +/** * The concrete implementation of an NIO file lock object. */ final class FileLockImpl extends FileLock { @@ -29,35 +29,41 @@ // Remembers if this lock has been released via the API. private boolean isReleased = false; - /* + /** * Answers a new file lock object with the given parameters. * - * @param channel the file channel hosting the lock. @param position the - * start position of the lock, in bytes @param size the length of the lock, - * in bytes @param shared whether this lock is shared (true) or exclusive - * (false) + * @param channel + * the file channel hosting the lock. + * @param position + * the start position of the lock, in bytes + * @param size + * the length of the lock, in bytes + * @param shared + * whether this lock is shared (true) or exclusive (false) */ public FileLockImpl(FileChannel channel, long position, long size, boolean shared) { super(channel, position, size, shared); } - /* + /** * Tests to see if the lock is valid. A lock can be invalidated if the * channel it is acquired on is closed or if it is released. (non-Javadoc) * * @see java.nio.channels.FileLock#isValid() */ + @Override public boolean isValid() { return !isReleased && channel().isOpen(); } - /* + /** * Releases the file lock on the channel that acquired it. Releasing an * invalid lock has no effect. * * @see java.nio.channels.FileLock#release() */ + @Override public void release() throws IOException { if (!channel().isOpen()) { throw new ClosedChannelException(); Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/IOUtil.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/IOUtil.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/IOUtil.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/IOUtil.java Tue Mar 4 00:02:13 2008 @@ -29,7 +29,7 @@ import org.apache.harmony.nio.Util; import org.apache.harmony.nio.internal.nls.Messages; -/* +/** * Static methods for I/O util. Used by io package and nio package. */ public final class IOUtil { Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/PipeImpl.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/PipeImpl.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/PipeImpl.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/PipeImpl.java Tue Mar 4 00:02:13 2008 @@ -108,7 +108,7 @@ super(provider); sourceServer = provider.openServerSocketChannel(); sourceServer.socket().bind( - new InetSocketAddress(InetAddress.getLocalHost(), 0)); + new InetSocketAddress(InetAddress.getByName(null), 0)); serverPort = sourceServer.socket().getLocalPort(); } @@ -161,8 +161,8 @@ } public boolean finishConnect() throws IOException { - return sinkSocket.connect(new InetSocketAddress(InetAddress - .getLocalHost(), serverPort)); + return sinkSocket.connect( + new InetSocketAddress(InetAddress.getByName(null), serverPort)); } protected void implCloseSelectableChannel() throws IOException { Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java Tue Mar 4 00:02:13 2008 @@ -449,7 +449,7 @@ int length = target.remaining(); if (target.isDirect()) { long address = AddressUtil.getDirectBufferAddress(target); - readCount = networkSystem.readDirect(fd, address, offset, + readCount = networkSystem.readDirect(fd, address + offset, length, (isBlocking() ? TIMEOUT_BLOCK : TIMEOUT_NONBLOCK)); } else { @@ -546,7 +546,7 @@ } if (source.isDirect()) { long address = AddressUtil.getDirectBufferAddress(source); - writeCount = networkSystem.writeDirect(fd, address, pos, + writeCount = networkSystem.writeDirect(fd, address + pos, length); } else if (source.hasArray()) { pos += source.arrayOffset(); Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java?rev=633384&r1=633383&r2=633384&view=diff ============================================================================== --- harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java (original) +++ harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java Tue Mar 4 00:02:13 2008 @@ -22,6 +22,7 @@ import java.io.OutputStream; import java.net.BindException; import java.net.ConnectException; +import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; @@ -2028,6 +2029,42 @@ } } + public void testReadByteBuffer_Direct2() throws IOException { + byte[] request = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + ByteBuffer buffer = ByteBuffer.allocateDirect(128); + + ServerSocketChannel server = ServerSocketChannel.open(); + server.socket().bind( + new InetSocketAddress(InetAddress.getLocalHost(), 0), 5); + Socket client = new Socket(InetAddress.getLocalHost(), server.socket() + .getLocalPort()); + client.setTcpNoDelay(false); + Socket worker = server.socket().accept(); + SocketChannel workerChannel = worker.getChannel(); + + OutputStream out = client.getOutputStream(); + out.write(request); + out.close(); + + buffer.limit(5); + int bytesRead = workerChannel.read(buffer); + assertEquals(5, bytesRead); + assertEquals(5, buffer.position()); + + buffer.limit(request.length); + bytesRead = workerChannel.read(buffer); + assertEquals(6, bytesRead); + + buffer.flip(); + assertEquals(request.length, buffer.limit()); + + assertEquals(ByteBuffer.wrap(request), buffer); + + client.close(); + worker.close(); + server.close(); + } + public void testReadByteBuffer_BufNull() throws Exception { assertTrue(this.server1.isBound()); java.nio.ByteBuffer readBuf = java.nio.ByteBuffer.allocate(0);