From ce92dece273720d9e43d489d72b91be596c9833a Mon Sep 17 00:00:00 2001 From: Denis Anisimov Date: Sat, 16 Aug 2014 16:22:12 +0300 Subject: [PATCH] StreamResource methods equals() and hashCode() are corrected (#14027). Change-Id: I68a629a29cc0d6efd2dd7788875a1dc4182ee6bf --- .../src/com/vaadin/server/StreamResource.java | 15 +++-- .../tests/server/TestStreamResource.java | 55 +++++++++++++++++++ 2 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 server/tests/src/com/vaadin/tests/server/TestStreamResource.java diff --git a/server/src/com/vaadin/server/StreamResource.java b/server/src/com/vaadin/server/StreamResource.java index 248d62338b..070cfb5138 100644 --- a/server/src/com/vaadin/server/StreamResource.java +++ b/server/src/com/vaadin/server/StreamResource.java @@ -18,7 +18,9 @@ package com.vaadin.server; import java.io.InputStream; import java.io.Serializable; +import java.util.Arrays; +import com.vaadin.shared.util.SharedUtil; import com.vaadin.util.FileTypeResolver; /** @@ -219,10 +221,9 @@ public class StreamResource implements ConnectorResource { return true; } else if (obj instanceof StreamResource) { StreamResource that = (StreamResource) obj; - return getStreamSource().equals(that.getStreamSource()) - && getMIMEType().equals(that.getMIMEType()) - && String.valueOf(getFilename()).equals( - String.valueOf(that.getFilename())) + return SharedUtil.equals(getStreamSource(), that.getStreamSource()) + && SharedUtil.equals(MIMEType, that.MIMEType) + && SharedUtil.equals(getFilename(), that.getFilename()) && getBufferSize() == that.getBufferSize() && getCacheTime() == that.getCacheTime(); } else { @@ -232,10 +233,8 @@ public class StreamResource implements ConnectorResource { @Override public int hashCode() { - return (int) (getStreamSource().hashCode() + 37 - * getMIMEType().hashCode() + 37 ^ 2 - * String.valueOf(getFilename()).hashCode() + 37 ^ 3 - * getBufferSize() + 37 ^ 4 * getCacheTime()); + return Arrays.hashCode(new Object[] { getStreamSource(), MIMEType, + getFilename(), getBufferSize(), getCacheTime() }); } } diff --git a/server/tests/src/com/vaadin/tests/server/TestStreamResource.java b/server/tests/src/com/vaadin/tests/server/TestStreamResource.java new file mode 100644 index 0000000000..0fdcc9e39c --- /dev/null +++ b/server/tests/src/com/vaadin/tests/server/TestStreamResource.java @@ -0,0 +1,55 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.server; + +import org.easymock.EasyMock; +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.server.StreamResource; +import com.vaadin.server.StreamResource.StreamSource; + +/** + * + * @author Vaadin Ltd + */ +public class TestStreamResource { + + @Test + public void testEqualsWithNullFields() { + StreamResource resource1 = new StreamResource(null, null); + StreamResource resource2 = new StreamResource(null, null); + + Assert.assertEquals(resource1, resource2); + } + + @Test + public void testNotEqualsWithNullFields() { + StreamResource resource1 = new StreamResource(null, null); + StreamResource resource2 = new StreamResource( + EasyMock.createMock(StreamSource.class), ""); + + Assert.assertNotEquals(resource1, resource2); + } + + @Test + public void testHashCodeForNullFields() { + StreamResource resource = new StreamResource(null, null); + // No NPE + resource.hashCode(); + } + +} -- 2.39.5