Skip to content

Commit 8922ed5

Browse files
committed
Added unittests for ViewServiceContainer class
1 parent 386460a commit 8922ed5

4 files changed

Lines changed: 144 additions & 9 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
<LangVersion>8.0</LangVersion>
6+
<Nullable>enable</Nullable>
7+
<IsPackable>false</IsPackable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="FakeItEasy" Version="6.2.1" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
13+
<PackageReference Include="MSTest.TestAdapter" Version="2.1.0" />
14+
<PackageReference Include="MSTest.TestFramework" Version="2.1.0" />
15+
<PackageReference Include="coverlet.collector" Version="1.2.0" />
16+
</ItemGroup>
17+
18+
<ItemGroup>
19+
<ProjectReference Include="..\MessageCommunicator\MessageCommunicator.csproj" />
20+
<ProjectReference Include="..\MessageCommunicator.TestGui\MessageCommunicator.TestGui.csproj" />
21+
</ItemGroup>
22+
23+
</Project>
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Reactive.Disposables;
5+
using System.Text;
6+
using Avalonia.Controls;
7+
using FakeItEasy;
8+
using Microsoft.VisualStudio.TestTools.UnitTesting;
9+
10+
namespace MessageCommunicator.TestGui.Tests
11+
{
12+
[TestClass]
13+
public class ViewServiceContainerTests
14+
{
15+
[TestMethod]
16+
public void Check_EmptyObject()
17+
{
18+
var fakeOwner = A.Fake<IControl>();
19+
var viewServiceContainer = new ViewServiceContainer(fakeOwner);
20+
21+
Assert.IsFalse(viewServiceContainer.IsObserving);
22+
}
23+
24+
[TestMethod]
25+
public void Check_RegisterNullViewModel()
26+
{
27+
var fakeOwner = A.Fake<IControl>();
28+
var viewServiceContainer = new ViewServiceContainer(fakeOwner);
29+
30+
var compositeDisposable = new CompositeDisposable();
31+
viewServiceContainer.StartObserving(compositeDisposable, null);
32+
33+
Assert.IsTrue(compositeDisposable.Count == 1);
34+
Assert.IsTrue(viewServiceContainer.IsObserving);
35+
}
36+
37+
[TestMethod]
38+
public void Check_RegisterNullViewModel_WithDeregister()
39+
{
40+
var fakeOwner = A.Fake<IControl>();
41+
var viewServiceContainer = new ViewServiceContainer(fakeOwner);
42+
43+
var compositeDisposable = new CompositeDisposable();
44+
viewServiceContainer.StartObserving(compositeDisposable, null);
45+
46+
compositeDisposable.Dispose();
47+
48+
Assert.IsTrue(compositeDisposable.Count == 0);
49+
Assert.IsFalse(viewServiceContainer.IsObserving);
50+
}
51+
52+
[TestMethod]
53+
public void Check_RegisterNullViewModel_WithViewService()
54+
{
55+
var fakeOwner = A.Fake<IControl>();
56+
var viewServiceContainer = new ViewServiceContainer(fakeOwner);
57+
var fakeViewService1 = A.Fake<IViewService>();
58+
var fakeViewService2 = A.Fake<IViewService>();
59+
60+
viewServiceContainer.ViewServices.Add(fakeViewService1);
61+
62+
var compositeDisposable = new CompositeDisposable();
63+
viewServiceContainer.StartObserving(compositeDisposable, null);
64+
65+
viewServiceContainer.ViewServices.Add(fakeViewService2);
66+
67+
Assert.IsTrue(compositeDisposable.Count == 1);
68+
Assert.IsTrue(viewServiceContainer.IsObserving);
69+
Assert.IsTrue(Fake.GetCalls(fakeViewService1).Any(actCall => actCall.Method.Name == $"add_{nameof(IViewService.ViewServiceRequest)}"));
70+
Assert.IsTrue(Fake.GetCalls(fakeViewService2).Any(actCall => actCall.Method.Name == $"add_{nameof(IViewService.ViewServiceRequest)}"));
71+
}
72+
73+
[TestMethod]
74+
public void Check_RegisterNullViewModel__WithDeregister_WithViewService()
75+
{
76+
var fakeOwner = A.Fake<IControl>();
77+
var viewServiceContainer = new ViewServiceContainer(fakeOwner);
78+
var fakeViewService1 = A.Fake<IViewService>();
79+
var fakeViewService2 = A.Fake<IViewService>();
80+
81+
viewServiceContainer.ViewServices.Add(fakeViewService1);
82+
83+
var compositeDisposable = new CompositeDisposable();
84+
viewServiceContainer.StartObserving(compositeDisposable, null);
85+
86+
viewServiceContainer.ViewServices.Add(fakeViewService2);
87+
88+
compositeDisposable.Dispose();
89+
90+
Assert.IsTrue(compositeDisposable.Count == 0);
91+
Assert.IsFalse(viewServiceContainer.IsObserving);
92+
Assert.IsTrue(Fake.GetCalls(fakeViewService1).Any(actCall => actCall.Method.Name == $"add_{nameof(IViewService.ViewServiceRequest)}"));
93+
Assert.IsTrue(Fake.GetCalls(fakeViewService1).Any(actCall => actCall.Method.Name == $"remove_{nameof(IViewService.ViewServiceRequest)}"));
94+
Assert.IsTrue(Fake.GetCalls(fakeViewService2).Any(actCall => actCall.Method.Name == $"add_{nameof(IViewService.ViewServiceRequest)}"));
95+
Assert.IsTrue(Fake.GetCalls(fakeViewService2).Any(actCall => actCall.Method.Name == $"remove_{nameof(IViewService.ViewServiceRequest)}"));
96+
}
97+
}
98+
}

MessageCommunicator.TestGui/_Util/_View/ViewServiceContainer.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,16 @@ public ViewServiceContainer(IControl owner)
2727

2828
public void StartObserving(CompositeDisposable disposables, OwnViewModelBase? viewModel)
2929
{
30-
if (viewModel == null) { return; }
3130
if (_observerDisposable != null)
3231
{
3332
throw new InvalidOperationException("This instance is already registered on the view!");
3433
}
3534

3635
_observedViewModel = viewModel;
37-
_observedViewModel.ViewServiceRequest += this.OnViewServiceRequest;
36+
if (_observedViewModel != null)
37+
{
38+
_observedViewModel.ViewServiceRequest += this.OnViewServiceRequest;
39+
}
3840

3941
_observerDisposable = new ObserverStopAdapter(this);
4042
disposables.Add(_observerDisposable);
@@ -61,7 +63,7 @@ private void StopObserving()
6163
}
6264
}
6365

64-
private object? FindViewService(Type viewServiceType)
66+
public object? FindViewService(Type viewServiceType)
6567
{
6668
var actParent = (IControl?)this.Owner;
6769
object? result = null;
@@ -89,17 +91,23 @@ private void OnViewServices_CollectionChanged(object sender, NotifyCollectionCha
8991
{
9092
if (_observerDisposable == null) { return; }
9193

92-
foreach (IViewService? actNewItem in e.NewItems)
94+
if (e.NewItems != null)
9395
{
94-
if(actNewItem == null){ continue; }
96+
foreach (IViewService? actNewItem in e.NewItems)
97+
{
98+
if(actNewItem == null){ continue; }
9599

96-
actNewItem.ViewServiceRequest += this.OnViewServiceRequest;
100+
actNewItem.ViewServiceRequest += this.OnViewServiceRequest;
101+
}
97102
}
98-
foreach (IViewService? actOldItem in e.OldItems)
103+
if (e.OldItems != null)
99104
{
100-
if(actOldItem == null){ continue; }
105+
foreach (IViewService? actOldItem in e.OldItems)
106+
{
107+
if(actOldItem == null){ continue; }
101108

102-
actOldItem.ViewServiceRequest -= this.OnViewServiceRequest;
109+
actOldItem.ViewServiceRequest -= this.OnViewServiceRequest;
110+
}
103111
}
104112
}
105113

MessageCommunicator.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuget", "Nuget", "{C55F0A61
4343
_Misc\Nuget\MessageCommunicator_128.png = _Misc\Nuget\MessageCommunicator_128.png
4444
EndProjectSection
4545
EndProject
46+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageCommunicator.TestGui.Tests", "MessageCommunicator.TestGui.Tests\MessageCommunicator.TestGui.Tests.csproj", "{890F521E-B731-44C1-9C73-D2E45B5FC2E7}"
47+
EndProject
4648
Global
4749
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4850
Debug|Any CPU = Debug|Any CPU
@@ -65,6 +67,10 @@ Global
6567
{7B36AA01-E6A4-49BD-9063-DA56DD25DBAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
6668
{7B36AA01-E6A4-49BD-9063-DA56DD25DBAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
6769
{7B36AA01-E6A4-49BD-9063-DA56DD25DBAD}.Release|Any CPU.Build.0 = Release|Any CPU
70+
{890F521E-B731-44C1-9C73-D2E45B5FC2E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
71+
{890F521E-B731-44C1-9C73-D2E45B5FC2E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
72+
{890F521E-B731-44C1-9C73-D2E45B5FC2E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
73+
{890F521E-B731-44C1-9C73-D2E45B5FC2E7}.Release|Any CPU.Build.0 = Release|Any CPU
6874
EndGlobalSection
6975
GlobalSection(SolutionProperties) = preSolution
7076
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)