Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit cb42cc0

Browse files
Initial testing functionality
1 parent 6b69389 commit cb42cc0

File tree

4 files changed

+228
-1
lines changed

4 files changed

+228
-1
lines changed

src/GitHub.Api/UI/TreeBase.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,19 @@ public interface ITreeNode
2626

2727
public abstract class TreeBase<TNode, TData> where TNode : class, ITreeNode where TData : struct, ITreeData
2828
{
29+
protected ILogging Logger { get; }
30+
31+
protected TreeBase()
32+
{
33+
Logger = Logging.GetLogger(GetType());
34+
}
35+
2936
public abstract IEnumerable<string> GetCheckedFiles();
3037

3138
public void Load(IEnumerable<TData> treeDatas)
3239
{
40+
Logger.Trace("Load");
41+
3342
var collapsedFolders = new HashSet<string>(GetCollapsedFolders());
3443
var selectedNodePath = SelectedNodePath;
3544
var checkedFiles = new HashSet<string>(GetCheckedFiles());
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using GitHub.Unity;
4+
using NSubstitute;
5+
using NUnit.Framework;
6+
7+
namespace UnitTests
8+
{
9+
public class TestTreeNode : ITreeNode
10+
{
11+
public string Path { get; set; }
12+
public string Label { get; set; }
13+
public int Level { get; set; }
14+
public bool IsFolder { get; set; }
15+
public bool IsCollapsed { get; set; }
16+
public bool IsHidden { get; set; }
17+
public bool IsActive { get; set; }
18+
public bool TreeIsCheckable { get; set; }
19+
public CheckState CheckState { get; set; }
20+
}
21+
22+
public struct TestTreeData: ITreeData
23+
{
24+
public string Path { get; }
25+
public bool IsActive { get; }
26+
}
27+
28+
public interface ITestTreeListener
29+
{
30+
void OnClear();
31+
void SetNodeIcon(TestTreeNode node);
32+
TestTreeNode CreateTreeNode(string path, string label, int level, bool isFolder, bool isActive, bool isHidden, bool isCollapsed, bool isChecked, TestTreeData? treeData);
33+
void AddCheckedNode(TestTreeNode node);
34+
void RemoveCheckedNode(TestTreeNode node);
35+
IEnumerable<string> GetCollapsedFolders();
36+
IEnumerable<string> GetCheckedFiles();
37+
TestTreeNode SelectedNode { get; set; }
38+
List<TestTreeNode> Nodes { get; set; }
39+
string Title { get; set; }
40+
bool DisplayRootNode { get; set; }
41+
bool IsSelectable { get; set; }
42+
bool IsCheckable { get; set; }
43+
string PathSeparator { get; set; }
44+
}
45+
46+
public class TestTree : TreeBase<TestTreeNode, TestTreeData>
47+
{
48+
public static ILogging Logger = Logging.GetLogger<TestTree>();
49+
private readonly bool traceLogging;
50+
51+
public TestTree(bool traceLogging = false)
52+
{
53+
this.traceLogging = traceLogging;
54+
TestTreeListener = Substitute.For<ITestTreeListener>();
55+
}
56+
57+
public ITestTreeListener TestTreeListener { get; set; }
58+
59+
public override IEnumerable<string> GetCheckedFiles()
60+
{
61+
if (traceLogging) Logger.Trace("GetCheckedFiles");
62+
return TestTreeListener.GetCheckedFiles();
63+
}
64+
65+
protected override IEnumerable<string> GetCollapsedFolders()
66+
{
67+
if (traceLogging) Logger.Trace("GetCollapsedFolders");
68+
return TestTreeListener.GetCollapsedFolders();
69+
}
70+
71+
protected override void RemoveCheckedNode(TestTreeNode node)
72+
{
73+
if (traceLogging) Logger.Trace("RemoveCheckedNode");
74+
TestTreeListener.RemoveCheckedNode(node);
75+
}
76+
77+
protected override void AddCheckedNode(TestTreeNode node)
78+
{
79+
if (traceLogging) Logger.Trace("AddCheckedNode");
80+
TestTreeListener.AddCheckedNode(node);
81+
}
82+
83+
protected override TestTreeNode CreateTreeNode(string path, string label, int level, bool isFolder, bool isActive, bool isHidden,
84+
bool isCollapsed, bool isChecked, TestTreeData? treeData)
85+
{
86+
if (traceLogging) Logger.Trace("CreateTreeNode");
87+
return TestTreeListener.CreateTreeNode(path, label, level, isFolder, isActive, isHidden, isCollapsed, isChecked, treeData);
88+
}
89+
90+
protected override void OnClear()
91+
{
92+
if (traceLogging) Logger.Trace("OnClear");
93+
TestTreeListener.OnClear();
94+
}
95+
96+
protected override void SetNodeIcon(TestTreeNode node)
97+
{
98+
if (traceLogging) Logger.Trace("Set NodeIcon");
99+
TestTreeListener.SetNodeIcon(node);
100+
}
101+
102+
public override TestTreeNode SelectedNode
103+
{
104+
get
105+
{
106+
if (traceLogging) Logger.Trace("Get SelectedNode");
107+
return TestTreeListener.SelectedNode;
108+
}
109+
set
110+
{
111+
if (traceLogging) Logger.Trace("Set SelectedNode");
112+
TestTreeListener.SelectedNode = value;
113+
}
114+
}
115+
116+
protected override List<TestTreeNode> Nodes
117+
{
118+
get
119+
{
120+
if (traceLogging) Logger.Trace("Get Nodes");
121+
return TestTreeListener.Nodes;
122+
}
123+
}
124+
125+
public override string Title
126+
{
127+
get
128+
{
129+
if (traceLogging) Logger.Trace("Get Title");
130+
return TestTreeListener.Title;
131+
}
132+
set
133+
{
134+
if (traceLogging) Logger.Trace("Set Title");
135+
TestTreeListener.Title = value;
136+
}
137+
}
138+
139+
public override bool DisplayRootNode
140+
{
141+
get
142+
{
143+
if (traceLogging) Logger.Trace("Get DisplayRootNode");
144+
return TestTreeListener.DisplayRootNode;
145+
}
146+
set
147+
{
148+
if (traceLogging) Logger.Trace("Set DisplayRootNode");
149+
TestTreeListener.DisplayRootNode = value;
150+
}
151+
}
152+
153+
public override bool IsSelectable
154+
{
155+
get
156+
{
157+
if (traceLogging) Logger.Trace("Get IsSelectable");
158+
return TestTreeListener.IsSelectable;
159+
}
160+
set
161+
{
162+
if (traceLogging) Logger.Trace("Set IsSelectable");
163+
TestTreeListener.IsSelectable = value;
164+
}
165+
}
166+
167+
public override bool IsCheckable
168+
{
169+
get
170+
{
171+
if (traceLogging) Logger.Trace("Get IsCheckable");
172+
return TestTreeListener.IsCheckable;
173+
}
174+
set
175+
{
176+
if (traceLogging) Logger.Trace("Set IsCheckable");
177+
TestTreeListener.IsCheckable = value;
178+
}
179+
}
180+
181+
public override string PathSeparator
182+
{
183+
get
184+
{
185+
if (traceLogging) Logger.Trace("Get PathSeparator");
186+
return TestTreeListener.PathSeparator;
187+
}
188+
set
189+
{
190+
if (traceLogging) Logger.Trace("Set PathSeparator");
191+
TestTreeListener.PathSeparator = value;
192+
}
193+
}
194+
}
195+
196+
[TestFixture]
197+
public class TreeBaseTests
198+
{
199+
[Test]
200+
public void ShouldClearOnEmptyData()
201+
{
202+
var testTree = new TestTree(true);
203+
var testTreeListener = testTree.TestTreeListener;
204+
205+
testTreeListener.GetCollapsedFolders().Returns(new string[0]);
206+
testTreeListener.SelectedNode.Returns((TestTreeNode) null);
207+
testTreeListener.GetCheckedFiles().Returns(new string[0]);
208+
testTreeListener.Nodes.Returns(new List<TestTreeNode>());
209+
210+
testTree.Load(Enumerable.Empty<TestTreeData>());
211+
212+
testTreeListener.Received(1).OnClear();
213+
testTreeListener.SelectedNode.Set
214+
}
215+
}
216+
}

src/tests/UnitTests/UnitTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
<Compile Include="ProcessManagerExtensions.cs" />
9797
<Compile Include="SetUpFixture.cs" />
9898
<Compile Include="Properties\AssemblyInfo.cs" />
99+
<Compile Include="UI\TreeBaseTests.cs" />
99100
</ItemGroup>
100101
<ItemGroup>
101102
<ProjectReference Include="$(SolutionDir)\src\GitHub.Api\GitHub.Api.csproj">

src/tests/UnitTests/UnitTests.csproj.DotSettings

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=io/@EntryIndexedValue">True</s:Boolean>
77
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=logging/@EntryIndexedValue">True</s:Boolean>
88
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=metrics/@EntryIndexedValue">True</s:Boolean>
9-
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=repository/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
9+
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=repository/@EntryIndexedValue">True</s:Boolean>
10+
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=ui/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

0 commit comments

Comments
 (0)