closes #1266, implement Form equals method and add unit tests
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/core/Form.java b/jaxrs-api/src/main/java/jakarta/ws/rs/core/Form.java
index d4e0e60..0ba06d5 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/core/Form.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/core/Form.java
@@ -93,4 +93,19 @@
     public MultivaluedMap<String, String> asMap() {
         return parameters;
     }
+
+    /**
+     * Compare for equality
+     * 
+     * @param object the object to compare to.
+     * @return {@code true}, if the object is a {@code Form} with the same form parameters, {@code false} otherwise.
+     */
+    @Override
+    public boolean equals(Object object) {
+        if (object == null) return false;
+        if (object == this) return true;
+        if (getClass() != object.getClass()) return false;
+        Form form = (Form) object;
+        return parameters.equals(form.asMap());
+    }
 }
diff --git a/jaxrs-api/src/test/java/jakarta/ws/rs/core/FormTest.java b/jaxrs-api/src/test/java/jakarta/ws/rs/core/FormTest.java
new file mode 100644
index 0000000..503d88f
--- /dev/null
+++ b/jaxrs-api/src/test/java/jakarta/ws/rs/core/FormTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package jakarta.ws.rs.core;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class FormTest {
+    
+    @Test
+    public void testNullEquals() {
+        Form form = new Form();
+        assertFalse(form.equals(null));
+    }
+
+    @Test
+    public void testSameObjectEquals() {
+        Form form = new Form();
+        assertTrue(form.equals(form));
+    }
+
+    @Test
+    public void testDifferentObjectTypeEquals() {
+        Form form = new Form("field", "value");
+        Cookie cookie = new Cookie.Builder("field")
+            .value("value")
+            .build();
+        assertFalse(form.equals(cookie));
+    }
+
+    @Test
+    public void testFormContentEquals() {
+        final String NAME_FIELD = "name";
+        final String AGE_FIELD = "age";
+        final String NAME_VALUE = "john";
+        final String AGE_VALUE = "25";
+        Form form1 = new Form(NAME_FIELD,NAME_VALUE).param(AGE_FIELD, AGE_VALUE);
+        Form form2 = new Form(NAME_FIELD,NAME_VALUE).param(AGE_FIELD, AGE_VALUE);
+        assertTrue(form1.equals(form2));
+        form2 = new Form(AGE_FIELD, AGE_VALUE).param(NAME_FIELD,NAME_VALUE);
+        assertTrue(form1.equals(form2));
+        form2 = new Form(AGE_VALUE, AGE_FIELD).param(NAME_VALUE, NAME_FIELD);
+        assertFalse(form1.equals(form2));
+        form2 = new Form(AGE_FIELD, AGE_VALUE).param(NAME_FIELD,NAME_VALUE).param("location", "USA");
+        assertFalse(form1.equals(form2));
+    }
+}