Browse Source

Simplify JsonValue.

pull/889/head
Sebastian 4 years ago
parent
commit
6b54854145
  1. 43
      backend/src/Squidex.Infrastructure/Json/Objects/JsonValue.cs
  2. 51
      backend/tests/Squidex.Infrastructure.Tests/Json/Objects/JsonObjectTests.cs

43
backend/src/Squidex.Infrastructure/Json/Objects/JsonValue.cs

@ -314,51 +314,12 @@ namespace Squidex.Infrastructure.Json.Objects
public bool Equals(JsonValue other) public bool Equals(JsonValue other)
{ {
if (other.Type != Type) return Equals(other.Value, Value);
{
return false;
}
switch (Value)
{
case null:
return true;
case bool b:
return b == (bool)other.Value!;
case double d:
return d == (double)other.Value!;
case string s:
return s == (string)other.Value!;
case JsonArray a:
return a.Equals((JsonArray)other.Value!);
case JsonObject o:
return o.Equals((JsonObject)other.Value!);
default:
ThrowInvalidType();
return default!;
}
} }
public override int GetHashCode() public override int GetHashCode()
{ {
switch (Value) return Value?.GetHashCode() ?? 0;
{
case null:
return 0;
case bool b:
return b.GetHashCode();
case double d:
return d.GetHashCode();
case string s:
return s.GetHashCode(StringComparison.OrdinalIgnoreCase);
case JsonArray a:
return a.GetHashCode();
case JsonObject o:
return o.GetHashCode();
default:
ThrowInvalidType();
return default!;
}
} }
public override string ToString() public override string ToString()

51
backend/tests/Squidex.Infrastructure.Tests/Json/Objects/JsonObjectTests.cs

@ -22,8 +22,7 @@ namespace Squidex.Infrastructure.Json.Objects
var objOtherValue = new JsonObject().Add("key1", 2); var objOtherValue = new JsonObject().Add("key1", 2);
var objOtherKey = new JsonObject().Add("key2", 1); var objOtherKey = new JsonObject().Add("key2", 1);
var objOtherSize = new JsonObject().Add("key1", 1).Add("key2", 2);
var objOtherCount = new JsonObject().Add("key1", 1).Add("key2", 2);
var number = JsonValue.Create(1); var number = JsonValue.Create(1);
@ -39,9 +38,9 @@ namespace Squidex.Infrastructure.Json.Objects
Assert.NotEqual(obj1a.GetHashCode(), objOtherKey.GetHashCode()); Assert.NotEqual(obj1a.GetHashCode(), objOtherKey.GetHashCode());
Assert.False(obj1a.Equals((object)objOtherKey)); Assert.False(obj1a.Equals((object)objOtherKey));
Assert.NotEqual(obj1a, objOtherCount); Assert.NotEqual(obj1a, objOtherSize);
Assert.NotEqual(obj1a.GetHashCode(), objOtherCount.GetHashCode()); Assert.NotEqual(obj1a.GetHashCode(), objOtherSize.GetHashCode());
Assert.False(obj1a.Equals((object)objOtherCount)); Assert.False(obj1a.Equals((object)objOtherSize));
Assert.NotEqual(obj1a, number); Assert.NotEqual(obj1a, number);
Assert.NotEqual(obj1a.GetHashCode(), number.GetHashCode()); Assert.NotEqual(obj1a.GetHashCode(), number.GetHashCode());
@ -77,43 +76,43 @@ namespace Squidex.Infrastructure.Json.Objects
} }
[Fact] [Fact]
public void Should_make_correct_array_scalar_comparisons() public void Should_make_correct_scalar_comparisons()
{ {
var number_val1_a = JsonValue.Create(1); var number1a = JsonValue.Create(1);
var number_val1_b = JsonValue.Create(1); var number1b = JsonValue.Create(1);
var number_val2 = JsonValue.Create(2); var number2 = JsonValue.Create(2);
var boolean = JsonValue.True; var boolean = JsonValue.True;
Assert.Equal(number_val1_a, number_val1_b); Assert.Equal(number1a, number1b);
Assert.Equal(number_val1_a.GetHashCode(), number_val1_b.GetHashCode()); Assert.Equal(number1a.GetHashCode(), number1b.GetHashCode());
Assert.True(number_val1_a.Equals((object)number_val1_b)); Assert.True(number1a.Equals((object)number1b));
Assert.NotEqual(number_val1_a, number_val2); Assert.NotEqual(number1a, number2);
Assert.NotEqual(number_val1_a.GetHashCode(), number_val2.GetHashCode()); Assert.NotEqual(number1a.GetHashCode(), number2.GetHashCode());
Assert.False(number_val1_a.Equals((object)number_val2)); Assert.False(number1a.Equals((object)number2));
Assert.NotEqual(number_val1_a, boolean); Assert.NotEqual(number1a, boolean);
Assert.NotEqual(number_val1_a.GetHashCode(), boolean.GetHashCode()); Assert.NotEqual(number1a.GetHashCode(), boolean.GetHashCode());
Assert.False(number_val1_a.Equals((object)boolean)); Assert.False(number1a.Equals((object)boolean));
} }
[Fact] [Fact]
public void Should_make_correct_null_comparisons() public void Should_make_correct_null_comparisons()
{ {
var null_a = JsonValue.Null; var null1 = JsonValue.Null;
var null_b = JsonValue.Null; var null2 = JsonValue.Null;
var boolean = JsonValue.True; var boolean = JsonValue.True;
Assert.Equal(null_a, null_b); Assert.Equal(null1, null2);
Assert.Equal(null_a.GetHashCode(), null_b.GetHashCode()); Assert.Equal(null1.GetHashCode(), null2.GetHashCode());
Assert.True(null_a.Equals((object)null_b)); Assert.True(null1.Equals((object)null2));
Assert.NotEqual(null_a, boolean); Assert.NotEqual(null1, boolean);
Assert.NotEqual(null_a.GetHashCode(), boolean.GetHashCode()); Assert.NotEqual(null1.GetHashCode(), boolean.GetHashCode());
Assert.False(null_a.Equals((object)boolean)); Assert.False(null1.Equals((object)boolean));
} }
[Fact] [Fact]

Loading…
Cancel
Save