/*
* Copyright 2000-2016 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.server;
import org.junit.Assert;
import org.junit.Test;
import elemental.json.Json;
import elemental.json.JsonArray;
import elemental.json.JsonObject;
import elemental.json.JsonValue;
public class JsonEqualsTest {
@Test
public void differentTypes_notEqual() {
boolean equals = JsonCodec.jsonEquals(Json.create(5), Json.create("5"));
Assert.assertFalse("Different types should not be equal", equals);
}
@Test
public void nulls_equal() {
boolean equals = JsonCodec.jsonEquals(Json.createNull(),
Json.createNull());
Assert.assertTrue("Null and null should be equal", equals);
}
@Test
public void differentBooleans_notEqual() {
boolean equals = JsonCodec.jsonEquals(Json.create(true),
Json.create(false));
Assert.assertFalse("Different booleans should not be equal", equals);
}
@Test
public void sameBooleans_equal() {
boolean equals = JsonCodec.jsonEquals(Json.create(false),
Json.create(false));
Assert.assertTrue("Same booleans should be equal", equals);
}
@Test
public void differentNumbers_notEqual() {
boolean equals = JsonCodec.jsonEquals(Json.create(2), Json.create(5.6));
Assert.assertFalse("Different numbers should not be equal", equals);
}
@Test
public void sameNumbers_equal() {
boolean equals = JsonCodec.jsonEquals(Json.create(3.14),
Json.create(3.14));
Assert.assertTrue("Same numbers should be equal", equals);
}
@Test
public void differentStrings_notEqual() {
boolean equals = JsonCodec.jsonEquals(Json.create("abc"),
Json.create("def"));
Assert.assertFalse("Different strings should not be equal", equals);
}
@Test
public void sameStrings_equal() {
boolean equals = JsonCodec.jsonEquals(Json.create("abc"),
Json.create("abc"));
Assert.assertTrue("Same strings should be equal", equals);
}
@Test
public void differentKeyCountObject_notEqual() {
JsonObject o1 = Json.createObject();
o1.put("key", "value");
JsonObject o2 = Json.createObject();
boolean equals = JsonCodec.jsonEquals(o1, o2);
Assert.assertFalse(
"Object with different key counts should not be equal", equals);
}
@Test
public void differentKeySetObject_notEqual() {
JsonObject o1 = Json.createObject();
o1.put("key", "value");
JsonObject o2 = Json.createObject();
o2.put("key2", "value");
boolean equals = JsonCodec.jsonEquals(o1, o2);
Assert.assertFalse("Object with different keys should not be equal",
equals);
}
@Test
public void differentChildValuesObject_notEqual() {
JsonObject o1 = Json.createObject();
o1.put("key", "value");
JsonObject o2 = Json.createObject();
o2.put("key", true);
boolean equals = JsonCodec.jsonEquals(o1, o2);
Assert.assertFalse(
"Object with different child values should not be equal",
equals);
}
@Test
public void emptyObjects_equal() {
JsonObject o1 = Json.createObject();
JsonObject o2 = Json.createObject();
boolean equals = JsonCodec.jsonEquals(o1, o2);
Assert.assertTrue("Empty objects should be equal", equals);
}
@Test
public void sameObjects_equal() {
JsonObject o1 = Json.createObject();
o1.put("key", "value");
JsonObject o2 = Json.createObject();
o2.put("key", "value");
boolean equals = JsonCodec.jsonEquals(o1, o2);
Assert.assertTrue("Same objects should be equal", equals);
}
@Test
public void sameObjectsWithNullValues_equal() {
JsonObject o1 = Json.createObject();
o1.put("key", Json.createNull());
JsonObject o2 = Json.createObject();
o2.put("key", Json.createNull());
boolean equals = JsonCodec.jsonEquals(o1, o2);
Assert.assertTrue("Same objects should be equal", equals);
}
@Test
public void differentSizeArray_notEqual() {
JsonArray a1 = Json.createArray();
a1.set(0, 0);
JsonArray a2 = Json.createArray();
boolean equals = JsonCodec.jsonEquals(a1, a2);
Assert.assertFalse("Arrays with different sizes should not be equal",
equals);
}
@Test
public void differentContentArray_notEqual() {
JsonArray a1 = Json.createArray();
a1.set(0, 0);
JsonArray a2 = Json.createArray();
a2.set(0, 1);
boolean equals = JsonCodec.jsonEquals(a1, a2);
Assert.assertFalse("Arrays with different content should not be equal",
equals);
}
@Test
public void differentOrderArray_notEqual() {
JsonArray a1 = Json.createArray();
a1.set(0, 0);
a1.set(1, true);
JsonArray a2 = Json.createArray();
a2.set(0, true);
a2.set(1, 0);
boolean equals = JsonCodec.jsonEquals(a1, a2);
Assert.assertFalse("Arrays with different order should not be equal",
equals);
}
@Test
public void emptyArrays_equal() {
JsonArray a1 = Json.createArray();
JsonArray a2 = Json.createArray();
boolean equals = JsonCodec.jsonEquals(a1, a2);
Assert.assertTrue("Empty arrays should be equal", equals);
}
@Test
public void sameArrays_equal() {
JsonArray a1 = Json.createArray();
a1.set(0, 0);
a1.set(1, true);
JsonArray a2 = Json.createArray();
a2.set(0, 0);
a2.set(1, true);
boolean equals = JsonCodec.jsonEquals(a1, a2);
Assert.assertTrue("Same arrays should be equal", equals);
}
@Test
public void sameArraysWitNull_equal() {
JsonArray a1 = Json.createArray();
a1.set(0, Json.createNull());
JsonArray a2 = Json.createArray();
a2.set(0, Json.createNull());
boolean equals = JsonCodec.jsonEquals(a1, a2);
Assert.assertTrue("Same arrays should be equal", equals);
}
@Test
public void differentDeeplyNested_notEquals() {
boolean equals = JsonCodec.jsonEquals(createDeeplyNestedValue(1),
createDeeplyNestedValue(2));
Assert.assertFalse("Values should not be equal", equals);
}
@Test
public void sameDeeplyNested_equals() {
boolean equals = JsonCodec.jsonEquals(createDeeplyNestedValue(1),
createDeeplyNestedValue(1));
Assert.assertTrue("Values should be equal", equals);
}
private static JsonValue createDeeplyNestedValue(int leafValue) {
JsonObject childObject = Json.createObject();
childObject.put("value", leafValue);
JsonArray childArray = Json.createArray();
childArray.set(0, childObject);
JsonObject value = Json.createObject();
value.put("child", childArray);
return value;
}
}