]> source.dussan.org Git - vaadin-framework.git/commitdiff
StreamResource methods equals() and hashCode() are corrected (#14027).
authorDenis Anisimov <denis@vaadin.com>
Sat, 16 Aug 2014 13:22:12 +0000 (16:22 +0300)
committerVaadin Code Review <review@vaadin.com>
Wed, 20 Aug 2014 11:06:46 +0000 (11:06 +0000)
Change-Id: I68a629a29cc0d6efd2dd7788875a1dc4182ee6bf

server/src/com/vaadin/server/StreamResource.java
server/tests/src/com/vaadin/tests/server/TestStreamResource.java [new file with mode: 0644]

index 248d62338bca0bb72de0f9b066b3e02ef6475722..070cfb5138c439ba48101866242f60a9ac889b5f 100644 (file)
@@ -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 (file)
index 0000000..0fdcc9e
--- /dev/null
@@ -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();
+    }
+
+}