- Notifications
You must be signed in to change notification settings - Fork 324
/
Copy pathTest_ObservableObjectAttribute.cs
121 lines (96 loc) · 3.51 KB
/
Test_ObservableObjectAttribute.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
usingSystem.ComponentModel;
usingCommunityToolkit.Mvvm.ComponentModel;
usingMicrosoft.VisualStudio.TestTools.UnitTesting;
#pragma warning disable MVVMTK0033
namespaceCommunityToolkit.Mvvm.UnitTests;
[TestClass]
publicpartialclassTest_ObservableObjectAttribute
{
[TestMethod]
publicvoidTest_ObservableObjectAttribute_Events()
{
Assert.IsTrue(typeof(INotifyPropertyChanged).IsAssignableFrom(typeof(SampleModel)));
Assert.IsTrue(typeof(INotifyPropertyChanging).IsAssignableFrom(typeof(SampleModel)));
SampleModel?model=new();
(PropertyChangingEventArgs,int)changing=default;
(PropertyChangedEventArgs,int)changed=default;
model.PropertyChanging+=(s,e)=>
{
Assert.IsNull(changing.Item1);
Assert.IsNull(changed.Item1);
Assert.AreSame(model,s);
Assert.IsNotNull(s);
Assert.IsNotNull(e);
changing=(e,model.Data);
};
model.PropertyChanged+=(s,e)=>
{
Assert.IsNotNull(changing.Item1);
Assert.IsNull(changed.Item1);
Assert.AreSame(model,s);
Assert.IsNotNull(s);
Assert.IsNotNull(e);
changed=(e,model.Data);
};
model.Data=42;
Assert.AreEqual(changing.Item1?.PropertyName,nameof(SampleModel.Data));
Assert.AreEqual(changing.Item2,0);
Assert.AreEqual(changed.Item1?.PropertyName,nameof(SampleModel.Data));
Assert.AreEqual(changed.Item2,42);
}
[TestMethod]
publicvoidTest_ObservableObjectAttribute_OnSealedClass_Events()
{
Assert.IsTrue(typeof(INotifyPropertyChanged).IsAssignableFrom(typeof(SampleModelSealed)));
Assert.IsTrue(typeof(INotifyPropertyChanging).IsAssignableFrom(typeof(SampleModelSealed)));
SampleModelSealed?model=new();
(PropertyChangingEventArgs,int)changing=default;
(PropertyChangedEventArgs,int)changed=default;
model.PropertyChanging+=(s,e)=>
{
Assert.IsNull(changing.Item1);
Assert.IsNull(changed.Item1);
Assert.AreSame(model,s);
Assert.IsNotNull(s);
Assert.IsNotNull(e);
changing=(e,model.Data);
};
model.PropertyChanged+=(s,e)=>
{
Assert.IsNotNull(changing.Item1);
Assert.IsNull(changed.Item1);
Assert.AreSame(model,s);
Assert.IsNotNull(s);
Assert.IsNotNull(e);
changed=(e,model.Data);
};
model.Data=42;
Assert.AreEqual(changing.Item1?.PropertyName,nameof(SampleModelSealed.Data));
Assert.AreEqual(changing.Item2,0);
Assert.AreEqual(changed.Item1?.PropertyName,nameof(SampleModelSealed.Data));
Assert.AreEqual(changed.Item2,42);
}
[ObservableObject]
publicpartialclassSampleModel
{
privateintdata;
publicintData
{
get=>this.data;
set=>SetProperty(refthis.data,value);
}
}
[ObservableObject]
publicsealedpartialclassSampleModelSealed
{
privateintdata;
publicintData
{
get=>this.data;
set=>SetProperty(refthis.data,value);
}
}
}