Skip to content

Commit 8608951

Browse files
committed
test: 补充 HashSetComparer 单元测试
1 parent 24b8401 commit 8608951

File tree

4 files changed

+95
-73
lines changed

4 files changed

+95
-73
lines changed

src/BootstrapBlazor/Misc/ModelComparer.cs

Lines changed: 0 additions & 43 deletions
This file was deleted.

test/UnitTest/Misc/ModelEqualityComparerTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class ModelEqualityComparerTest
1111
public void Equals_Ok()
1212
{
1313
Assert.True(IModelEqualityComparerExtensions.Equals<Foo>(null!, null, null));
14-
Assert.False(IModelEqualityComparerExtensions.Equals<Foo>(null!, null, new Foo()));
15-
Assert.False(IModelEqualityComparerExtensions.Equals<Foo>(null!, new Foo(), null));
14+
Assert.False(IModelEqualityComparerExtensions.Equals(null!, null, new Foo()));
15+
Assert.False(IModelEqualityComparerExtensions.Equals(null!, new Foo(), null));
1616
}
1717
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
using System.ComponentModel.DataAnnotations;
7+
8+
namespace UnitTest.Utils;
9+
10+
public class HasSetComparerTest : BootstrapBlazorTestBase
11+
{
12+
[Fact]
13+
public void GetHashCode_NoKey_Ok()
14+
{
15+
var comparer = new HashSetComparer<Dummy>(new MockModelEqualityComparer<Dummy>() { });
16+
17+
var obj = new Dummy() { Id = 1 };
18+
19+
// 未提供 KeyAttribute 标签内部等同 obj.GetHashCode()
20+
Assert.Equal(obj.GetHashCode(), comparer.GetHashCode(obj));
21+
22+
// 空值相等
23+
Assert.True(comparer.Equals(null, null));
24+
25+
// 未提供 ModelEqualityComparer 两个对象不相等
26+
Assert.False(comparer.Equals(new Dummy() { Id = 1 }, new Dummy() { Id = 1 }));
27+
28+
// 空与非空比较
29+
Assert.False(comparer.Equals(new Dummy(), null));
30+
Assert.False(comparer.Equals(null, new Dummy()));
31+
}
32+
33+
[Fact]
34+
public void GetHashCode_Key_Ok()
35+
{
36+
var comparer = new HashSetComparer<Dog>(new MockModelEqualityComparer<Dog>() { });
37+
38+
var obj = new Dog() { Id = 1 };
39+
40+
// 提供 KeyAttribute 标签内部不等同 obj.GetHashCode()
41+
Assert.NotEqual(1, obj.GetHashCode());
42+
Assert.Equal(1, comparer.GetHashCode(obj));
43+
Assert.True(comparer.Equals(new Dog() { Id = 1 }, new Dog() { Id = 1 }));
44+
45+
// 空值相等
46+
Assert.True(comparer.Equals(null, null));
47+
48+
// 空与非空比较
49+
Assert.False(comparer.Equals(new Dog(), null));
50+
Assert.False(comparer.Equals(null, new Dog()));
51+
}
52+
53+
[Fact]
54+
public void GetHashCode_Comparer_Ok()
55+
{
56+
var comparer = new HashSetComparer<Dummy>(new MockModelEqualityComparer<Dummy>() { ModelEqualityComparer = (x, y) => x.Id == y.Id });
57+
58+
var obj = new Dummy() { Id = 1 };
59+
60+
// 未提供 KeyAttribute 标签内部等同 obj.GetHashCode()
61+
Assert.Equal(obj.GetHashCode(), comparer.GetHashCode(obj));
62+
63+
// 空值相等
64+
Assert.True(comparer.Equals(null, null));
65+
66+
// 提供 ModelEqualityComparer 两个对象相等
67+
Assert.True(comparer.Equals(new Dummy() { Id = 1 }, new Dummy() { Id = 1 }));
68+
69+
// 空与非空比较
70+
Assert.False(comparer.Equals(new Dummy(), null));
71+
Assert.False(comparer.Equals(null, new Dummy()));
72+
}
73+
74+
class Dummy
75+
{
76+
public int Id { get; set; }
77+
}
78+
79+
class Dog
80+
{
81+
[Key]
82+
public int Id { get; set; }
83+
}
84+
85+
class MockModelEqualityComparer<TModel> : IModelEqualityComparer<TModel>
86+
{
87+
public Func<TModel, TModel, bool>? ModelEqualityComparer { get; set; }
88+
89+
public Type CustomKeyAttribute { get; set; } = typeof(KeyAttribute);
90+
91+
public bool Equals(TModel? x, TModel? y) => this.Equals<TModel>(x, y);
92+
}
93+
}

test/UnitTest/Utils/ModelComparerTest.cs

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)