Hi Julia, Brent, Jason and Rob,

Thanks a lot for all your help guys! It's been a wonderful experience for
me. First patch for OpenJDK, checked!

Cheers,
Yu L.

On Mon, Jul 20, 2020 at 8:18 PM Julia Boes <julia.b...@oracle.com> wrote:

> Hi Lisa,
>
> I added a newline at the end of the test and ran the relevant test set,
> which came back all clear.
>
> The change is pushed now.
>
> Thanks,
>
> Julia
>
> On 19/07/2020 11:48, Lisa Li wrote:
> > Hi Julia,
> >
> > Apologies for the delay. Please review the updated fix for JDK-8245694
> > <https://bugs.openjdk.java.net/browse/JDK-8245694>.  Also, my name is
> > on the contributor list as: Yu Li - OpenJDK - yuli.
> >
> >
> > *BUG DESCRIPTION*:
> >
> > JDK-8245694 <https://bugs.openjdk.java.net/browse/JDK-8245694> :
> > java.util.Properties.entrySet() does not override java.lang.Object
> > methods since java 9.
> >
> >
> > *PATCH*:
> >
> > # HG changeset patch
> > # User yuli
> > # Date 1595152648 -28800
> > #      Sun Jul 19 17:57:28 2020 +0800
> > # Node ID 4f359fdb3df3407cf8b31cb9ad153a99c52165c8
> > # Parent  72bf0aca309e326f35cdc85cbdeb3076e4d4e74d
> > 8245694: java.util.Properties.entrySet() does not override Object methods
> > Summary: Add missing override methods
> > Contributed-by: Yu Li <liyu.it...@gmail.com <mailto:liyu.it...@gmail.com
> >>
> >
> > diff -r 72bf0aca309e -r 4f359fdb3df3
> > src/java.base/share/classes/java/util/Properties.java
> > --- a/src/java.base/share/classes/java/util/Properties.java Fri Jul 17
> > 17:27:31 2020 -0700
> > +++ b/src/java.base/share/classes/java/util/Properties.java Sun Jul 19
> > 17:57:28 2020 +0800
> > @@ -1405,6 +1405,21 @@
> >          }
> >
> >          @Override
> > +        public boolean equals(Object o) {
> > +            return o == this || entrySet.equals(o);
> > +        }
> > +
> > +        @Override
> > +        public int hashCode() {
> > +            return entrySet.hashCode();
> > +        }
> > +
> > +        @Override
> > +        public String toString() {
> > +            return entrySet.toString();
> > +        }
> > +
> > +        @Override
> >          public boolean removeAll(Collection<?> c) {
> >              return entrySet.removeAll(c);
> >          }
> > diff -r 72bf0aca309e -r 4f359fdb3df3
> > test/jdk/java/util/Properties/PropertiesEntrySetTest.java
> > --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> > +++ b/test/jdk/java/util/Properties/PropertiesEntrySetTest.java Sun
> > Jul 19 17:57:28 2020 +0800
> > @@ -0,0 +1,201 @@
> > +/*
> > + * Copyright (c) 2020, Oracle and/or its affiliates. All rights
> reserved.
> > + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
> > + *
> > + * This code is free software; you can redistribute it and/or modify it
> > + * under the terms of the GNU General Public License version 2 only, as
> > + * published by the Free Software Foundation.
> > + *
> > + * This code 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
> > + * version 2 for more details (a copy is included in the LICENSE file
> > that
> > + * accompanied this code).
> > + *
> > + * You should have received a copy of the GNU General Public License
> > version
> > + * 2 along with this work; if not, write to the Free Software
> Foundation,
> > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
> > + *
> > + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA
> > 94065 USA
> > + * or visit www.oracle.com <http://www.oracle.com> if you need
> > additional information or have any
> > + * questions.
> > + */
> > +
> > +/*
> > + * @test
> > + * @bug        8245694
> > + * @summary    tests the entrySet() method of Properties class
> > + * @author     Yu Li
> > + * @run testng PropertiesEntrySetTest
> > + */
> > +
> > +import org.testng.annotations.Test;
> > +
> > +import java.util.Properties;
> > +
> > +import static org.testng.Assert.assertEquals;
> > +import static org.testng.Assert.assertFalse;
> > +import static org.testng.Assert.assertThrows;
> > +import static org.testng.Assert.assertTrue;
> > +
> > +public class PropertiesEntrySetTest {
> > +
> > +    @Test
> > +    public void testEquals() {
> > +        Properties a = new Properties();
> > +        var aEntrySet = a.entrySet();
> > +        assertFalse(aEntrySet.equals(null));
> > +        assertTrue(aEntrySet.equals(aEntrySet));
> > +
> > +        Properties b = new Properties();
> > +        var bEntrySet = b.entrySet();
> > +        assertTrue(bEntrySet.equals(aEntrySet));
> > +        assertTrue(bEntrySet.hashCode() == aEntrySet.hashCode());
> > +
> > +        a.setProperty("p1", "1");
> > +        assertFalse(bEntrySet.equals(aEntrySet));
> > +        assertFalse(bEntrySet.hashCode() == aEntrySet.hashCode());
> > +
> > +        b.setProperty("p1", "1");
> > +        assertTrue(aEntrySet.equals(bEntrySet));
> > +        assertTrue(bEntrySet.hashCode() == aEntrySet.hashCode());
> > +
> > +        Properties c = new Properties();
> > +        c.setProperty("p1", "2");
> > +        var cEntrySet = c.entrySet();
> > +        assertFalse(cEntrySet.equals(bEntrySet));
> > +        assertFalse(bEntrySet.hashCode() == cEntrySet.hashCode());
> > +        assertFalse(cEntrySet.equals(aEntrySet));
> > +        assertFalse(aEntrySet.hashCode() == cEntrySet.hashCode());
> > +
> > +        a.setProperty("p2", "2");
> > +        Properties d = new Properties();
> > +        d.setProperty("p2", "2");
> > +        d.setProperty("p1", "1");
> > +        var dEntrySet = d.entrySet();
> > +        assertTrue(dEntrySet.equals(aEntrySet));
> > +        assertTrue(aEntrySet.hashCode() == dEntrySet.hashCode());
> > +
> > +        a.remove("p1");
> > +        assertFalse(aEntrySet.equals(dEntrySet));
> > +        assertFalse(aEntrySet.hashCode() == dEntrySet.hashCode());
> > +
> > +        d.remove("p1", "1");
> > +        assertTrue(dEntrySet.equals(aEntrySet));
> > +        assertTrue(aEntrySet.hashCode() == dEntrySet.hashCode());
> > +
> > +        a.clear();
> > +        assertFalse(aEntrySet.equals(dEntrySet));
> > +        assertFalse(aEntrySet.hashCode() == dEntrySet.hashCode());
> > +        assertTrue(aEntrySet.isEmpty());
> > +
> > +        d.clear();
> > +        assertTrue(dEntrySet.equals(aEntrySet));
> > +        assertTrue(aEntrySet.hashCode() == dEntrySet.hashCode());
> > +        assertTrue(dEntrySet.isEmpty());
> > +    }
> > +
> > +    @Test
> > +    public void testToString() {
> > +        Properties a = new Properties();
> > +        var aEntrySet = a.entrySet();
> > +        assertEquals(aEntrySet.toString(), "[]");
> > +
> > +        a.setProperty("p1", "1");
> > +        assertEquals(aEntrySet.toString(), "[p1=1]");
> > +
> > +        a.setProperty("p2", "2");
> > +        assertEquals(aEntrySet.size(), 2);
> > +  assertTrue(aEntrySet.toString().trim().startsWith("["));
> > +        assertTrue(aEntrySet.toString().contains("p1=1"));
> > +        assertTrue(aEntrySet.toString().contains("p2=2"));
> > +  assertTrue(aEntrySet.toString().trim().endsWith("]"));
> > +
> > +        Properties b = new Properties();
> > +        b.setProperty("p2", "2");
> > +        b.setProperty("p1", "1");
> > +        var bEntrySet = b.entrySet();
> > +        assertEquals(bEntrySet.size(), 2);
> > +  assertTrue(bEntrySet.toString().trim().startsWith("["));
> > +        assertTrue(bEntrySet.toString().contains("p1=1"));
> > +        assertTrue(bEntrySet.toString().contains("p2=2"));
> > +  assertTrue(bEntrySet.toString().trim().endsWith("]"));
> > +
> > +        b.setProperty("p0", "0");
> > +        assertEquals(bEntrySet.size(), 3);
> > +        assertTrue(bEntrySet.toString().contains("p0=0"));
> > +
> > +        b.remove("p1");
> > +        assertEquals(bEntrySet.size(), 2);
> > +        assertFalse(bEntrySet.toString().contains("p1=1"));
> > +  assertTrue(bEntrySet.toString().trim().startsWith("["));
> > +        assertTrue(bEntrySet.toString().contains("p0=0"));
> > +        assertTrue(bEntrySet.toString().contains("p2=2"));
> > +  assertTrue(bEntrySet.toString().trim().endsWith("]"));
> > +
> > +        b.remove("p0", "0");
> > +        assertEquals(bEntrySet.size(), 1);
> > +        assertFalse(bEntrySet.toString().contains("p0=0"));
> > +  assertTrue(bEntrySet.toString().trim().startsWith("["));
> > +        assertTrue(bEntrySet.toString().contains("p2=2"));
> > +  assertTrue(bEntrySet.toString().trim().endsWith("]"));
> > +
> > +        b.clear();
> > +        assertTrue(bEntrySet.isEmpty());
> > +        assertTrue(bEntrySet.toString().equals("[]"));
> > +    }
> > +
> > +    @Test
> > +    public void testEntrySetWithoutException() {
> > +        Properties a = new Properties();
> > +        a.setProperty("p1", "1");
> > +        a.setProperty("p2", "2");
> > +        var aEntrySet = a.entrySet();
> > +        assertEquals(aEntrySet.size(), 2);
> > +
> > +        var i = aEntrySet.iterator();
> > +        var e1 = i.next();
> > +        i.remove();
> > +        assertFalse(aEntrySet.contains(e1));
> > +        assertEquals(aEntrySet.size(), 1);
> > +
> > +        var e2 = i.next();
> > +        aEntrySet.remove(e2);
> > +        assertFalse(aEntrySet.contains(e2));
> > +        assertTrue(aEntrySet.isEmpty());
> > +
> > +        a.setProperty("p1", "1");
> > +        a.setProperty("p3", "3");
> > +        Properties b = new Properties();
> > +        b.setProperty("p2", "2");
> > +        b.setProperty("p1", "1");
> > +        var bEntrySet = b.entrySet();
> > +
> > +        assertFalse(bEntrySet.containsAll(aEntrySet));
> > +        assertEquals(bEntrySet.size(), 2);
> > +
> > +        assertTrue(bEntrySet.removeAll(aEntrySet));
> > +        assertEquals(bEntrySet.size(), 1);
> > +
> > +        assertTrue(bEntrySet.retainAll(aEntrySet));
> > +        assertTrue(bEntrySet.isEmpty());
> > +        assertEquals(aEntrySet.size(), 2);
> > +
> > +        aEntrySet.clear();
> > +        assertTrue(aEntrySet.isEmpty());
> > +    }
> > +
> > +    @Test
> > +    public void testEntrySetExceptionWhenAdd() {
> > +        Properties a = new Properties();
> > +        a.setProperty("p1", "1");
> > +        var aEntrySet = a.entrySet();
> > +
> > +        Properties b = new Properties();
> > +        b.setProperty("p2", "2");
> > +        var bEntrySet = b.entrySet();
> > +
> > +        assertThrows(UnsupportedOperationException.class, () ->
> > aEntrySet.addAll(bEntrySet));
> > +        assertThrows(UnsupportedOperationException.class, () ->
> > aEntrySet.add(bEntrySet.iterator().next()));
> > +    }
> > +}
> > \ No newline at end of file
> >
> > Best regards,
> > Yu L.
> >
> >
> > On Tue, Jun 23, 2020 at 12:32 AM Lisa Li <liyu.it...@gmail.com
> > <mailto:liyu.it...@gmail.com>> wrote:
> >
> >     Great, thanks Julia!
> >
> >     Best regards,
> >      Yu L.
> >
> >     On Mon, Jun 22, 2020 at 9:56 PM Julia Boes <julia.b...@oracle.com
> >     <mailto:julia.b...@oracle.com>> wrote:
> >
> >         Hi Yu,
> >
> >>         Just to confirm, for
> >>         src/java.base/share/classes/java/util/Properties.java the
> >>         copyright should be updated as :
> >>
> >>         + * Copyright (c) 1995, 2020, Oracle and/or its affiliates.
> >>         All rights
> >>
> >>         Because 1995 was the year when the file was added, while 2020
> >>         when this change is made. Correct me if I'm wrong.
> >
> >         That's right!
> >
> >         Cheers,
> >
> >         Julia
> >
> >
>

Reply via email to