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

Commit 05b0bd9

Browse files
Merge branch 'master' into fixes/task-cleanup
2 parents 1b7d015 + 06dd6e6 commit 05b0bd9

File tree

9 files changed

+967
-79
lines changed

9 files changed

+967
-79
lines changed

src/GitHub.Api/UI/TreeBase.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,30 @@ 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());
45+
var pathSeparator = PathSeparator;
3646

3747
Clear();
3848

3949
var displayRootLevel = DisplayRootNode ? 1 : 0;
4050

51+
var isCheckable = IsCheckable;
52+
4153
var isSelected = IsSelectable && selectedNodePath != null && Title == selectedNodePath;
4254
AddNode(Title, Title, -1 + displayRootLevel, true, false, false, false, isSelected, false, null);
4355

@@ -48,12 +60,12 @@ public void Load(IEnumerable<TData> treeDatas)
4860

4961
foreach (var treeData in treeDatas)
5062
{
51-
var parts = treeData.Path.Split(new[] { PathSeparator }, StringSplitOptions.None);
63+
var parts = treeData.Path.Split(new[] { pathSeparator }, StringSplitOptions.None);
5264
for (var i = 0; i < parts.Length; i++)
5365
{
5466
var label = parts[i];
5567
var level = i + 1;
56-
var nodePath = String.Join(PathSeparator, parts, 0, level);
68+
var nodePath = String.Join(pathSeparator, parts, 0, level);
5769
var isFolder = i < parts.Length - 1;
5870
var alreadyExists = folders.Contains(nodePath);
5971
if (!alreadyExists)
@@ -95,7 +107,7 @@ public void Load(IEnumerable<TData> treeDatas)
95107
{
96108
isActive = treeData.IsActive;
97109
treeNodeTreeData = treeData;
98-
isChecked = checkedFiles.Contains(nodePath);
110+
isChecked = isCheckable && checkedFiles.Contains(nodePath);
99111
}
100112

101113
isSelected = selectedNodePath != null && nodePath == selectedNodePath;
@@ -105,19 +117,20 @@ public void Load(IEnumerable<TData> treeDatas)
105117
}
106118
}
107119

108-
if (IsCheckable && checkedFiles.Any())
120+
if (isCheckable && checkedFiles.Any())
109121
{
110-
for (var index = Nodes.Count - 1; index >= 0; index--)
122+
var nodes = Nodes;
123+
for (var index = nodes.Count - 1; index >= 0; index--)
111124
{
112-
var node = Nodes[index];
125+
var node = nodes[index];
113126
if (node.Level >= 0 && node.IsFolder)
114127
{
115128
bool? anyChecked = null;
116129
bool? allChecked = null;
117130

118-
for (var i = index + 1; i < Nodes.Count; i++)
131+
for (var i = index + 1; i < nodes.Count; i++)
119132
{
120-
var nodeCompare = Nodes[i];
133+
var nodeCompare = nodes[i];
121134
if (nodeCompare.Level < node.Level + 1)
122135
{
123136
break;
Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,30 @@
11
using System;
2+
using System.IO;
23
using System.Linq;
34
using System.Threading;
4-
using GitHub.Unity;
55
using System.Threading.Tasks;
6-
using NSubstitute;
6+
using GitHub.Unity;
77

88
namespace IntegrationTests
99
{
10-
class BaseGitEnvironmentTest : BaseGitRepoTest
10+
class BaseGitEnvironmentTest : BasePlatformIntegrationTest
1111
{
1212
protected async Task<IEnvironment> Initialize(NPath repoPath, NPath environmentPath = null,
13-
bool enableEnvironmentTrace = false, bool initializeRepository = true, Action<RepositoryManager> onRepositoryManagerCreated = null)
13+
bool enableEnvironmentTrace = false, bool initializeRepository = true,
14+
Action<RepositoryManager> onRepositoryManagerCreated = null)
1415
{
15-
TaskManager = new TaskManager();
16-
SyncContext = new ThreadSynchronizationContext(TaskManager.Token);
17-
TaskManager.UIScheduler = new SynchronizationContextTaskScheduler(SyncContext);
18-
19-
//TODO: Mock CacheContainer
20-
ICacheContainer cacheContainer = Substitute.For<ICacheContainer>();
21-
Environment = new IntegrationTestEnvironment(cacheContainer, repoPath, SolutionDirectory, environmentPath, enableEnvironmentTrace);
22-
23-
var gitSetup = new GitInstaller(Environment, TaskManager.Token);
24-
await gitSetup.SetupIfNeeded();
25-
Environment.GitExecutablePath = gitSetup.GitExecutablePath;
26-
27-
Platform = new Platform(Environment);
16+
await InitializePlatform(repoPath, environmentPath, enableEnvironmentTrace);
2817

29-
GitEnvironment = Platform.GitEnvironment;
30-
ProcessManager = new ProcessManager(Environment, GitEnvironment, TaskManager.Token);
31-
32-
Platform.Initialize(ProcessManager, TaskManager);
33-
34-
GitClient = new GitClient(Environment, ProcessManager, TaskManager);
35-
36-
var repositoryManager = GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, repoPath);
18+
var repositoryManager =
19+
GitHub.Unity.RepositoryManager.CreateInstance(Platform, TaskManager, GitClient, repoPath);
3720
onRepositoryManagerCreated?.Invoke(repositoryManager);
3821

3922
RepositoryManager = repositoryManager;
4023
RepositoryManager.Initialize();
4124

4225
if (initializeRepository)
4326
{
44-
Environment.Repository = new Repository(repoPath, cacheContainer);
27+
Environment.Repository = new Repository(repoPath, CacheContainer);
4528
Environment.Repository.Initialize(RepositoryManager);
4629
}
4730

@@ -51,11 +34,8 @@ protected async Task<IEnvironment> Initialize(NPath repoPath, NPath environmentP
5134

5235
if (DotGitPath.FileExists())
5336
{
54-
DotGitPath =
55-
DotGitPath.ReadAllLines()
56-
.Where(x => x.StartsWith("gitdir:"))
57-
.Select(x => x.Substring(7).Trim().ToNPath())
58-
.First();
37+
DotGitPath = DotGitPath.ReadAllLines().Where(x => x.StartsWith("gitdir:"))
38+
.Select(x => x.Substring(7).Trim().ToNPath()).First();
5939
}
6040

6141
BranchesPath = DotGitPath.Combine("refs", "heads");
@@ -66,6 +46,21 @@ protected async Task<IEnvironment> Initialize(NPath repoPath, NPath environmentP
6646
return Environment;
6747
}
6848

49+
public override void OnSetup()
50+
{
51+
base.OnSetup();
52+
53+
TestRepoMasterCleanUnsynchronized = TestBasePath.Combine("IOTestsRepo", "IOTestsRepo_master_clean_unsync");
54+
TestRepoMasterCleanUnsynchronizedRussianLanguage = TestBasePath.Combine("IOTestsRepo", "IOTestsRepo_master_clean_sync_with_russian_language");
55+
TestRepoMasterCleanSynchronized = TestBasePath.Combine("IOTestsRepo", "IOTestsRepo_master_clean_sync");
56+
TestRepoMasterDirtyUnsynchronized = TestBasePath.Combine("IOTestsRepo", "IOTestsRepo_master_dirty_unsync");
57+
TestRepoMasterTwoRemotes = TestBasePath.Combine("IOTestsRepo", "IOTestsRepo_master_two_remotes");
58+
59+
Logger.Trace("Extracting Zip File to {0}", TestBasePath);
60+
ZipHelper.ExtractZipFile(TestZipFilePath, TestBasePath.ToString(), CancellationToken.None);
61+
Logger.Trace("Extracted Zip File");
62+
}
63+
6964
public override void OnTearDown()
7065
{
7166
RepositoryManager?.Stop();
@@ -76,14 +71,7 @@ public override void OnTearDown()
7671

7772
public IRepositoryManager RepositoryManager { get; private set; }
7873

79-
protected IPlatform Platform { get; private set; }
8074
protected IApplicationManager ApplicationManager { get; set; }
81-
protected IProcessManager ProcessManager { get; private set; }
82-
protected ITaskManager TaskManager { get; private set; }
83-
84-
protected IProcessEnvironment GitEnvironment { get; private set; }
85-
protected IGitClient GitClient { get; set; }
86-
protected SynchronizationContext SyncContext { get; set; }
8775

8876
protected NPath DotGitConfig { get; private set; }
8977

@@ -96,5 +84,17 @@ public override void OnTearDown()
9684
protected NPath BranchesPath { get; private set; }
9785

9886
protected NPath DotGitPath { get; private set; }
87+
88+
protected NPath TestRepoMasterCleanSynchronized { get; private set; }
89+
90+
protected NPath TestRepoMasterCleanUnsynchronized { get; private set; }
91+
92+
protected NPath TestRepoMasterCleanUnsynchronizedRussianLanguage { get; private set; }
93+
94+
protected NPath TestRepoMasterDirtyUnsynchronized { get; private set; }
95+
96+
protected NPath TestRepoMasterTwoRemotes { get; private set; }
97+
98+
private static string TestZipFilePath => Path.Combine(SolutionDirectory, "IOTestsRepo.zip");
9999
}
100100
}

src/tests/IntegrationTests/BaseGitRepoTest.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System.IO;
2+
using System.Threading.Tasks;
3+
using GitHub.Unity;
4+
using NSubstitute;
5+
6+
namespace IntegrationTests
7+
{
8+
class BasePlatformIntegrationTest : BaseTaskManagerTest
9+
{
10+
protected IPlatform Platform { get; private set; }
11+
protected IProcessManager ProcessManager { get; private set; }
12+
protected IProcessEnvironment GitEnvironment { get; private set; }
13+
protected IGitClient GitClient { get; set; }
14+
public ICacheContainer CacheContainer { get; set; }
15+
16+
protected async Task InitializePlatform(NPath repoPath, NPath environmentPath, bool enableEnvironmentTrace)
17+
{
18+
InitializeTaskManager();
19+
20+
CacheContainer = Substitute.For<ICacheContainer>();
21+
Environment = new IntegrationTestEnvironment(CacheContainer, repoPath, SolutionDirectory, environmentPath,
22+
enableEnvironmentTrace);
23+
24+
var gitSetup = new GitInstaller(Environment, TaskManager.Token);
25+
await gitSetup.SetupIfNeeded();
26+
Environment.GitExecutablePath = gitSetup.GitExecutablePath;
27+
28+
Platform = new Platform(Environment);
29+
30+
GitEnvironment = Platform.GitEnvironment;
31+
ProcessManager = new ProcessManager(Environment, GitEnvironment, TaskManager.Token);
32+
33+
Platform.Initialize(ProcessManager, TaskManager);
34+
35+
GitClient = new GitClient(Environment, ProcessManager, TaskManager);
36+
}
37+
}
38+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Threading;
2+
using GitHub.Unity;
3+
4+
namespace IntegrationTests
5+
{
6+
class BaseTaskManagerTest : BaseIntegrationTest
7+
{
8+
protected ITaskManager TaskManager { get; private set; }
9+
protected SynchronizationContext SyncContext { get; set; }
10+
11+
protected void InitializeTaskManager()
12+
{
13+
TaskManager = new TaskManager();
14+
SyncContext = new ThreadSynchronizationContext(TaskManager.Token);
15+
TaskManager.UIScheduler = new SynchronizationContextTaskScheduler(SyncContext);
16+
}
17+
}
18+
}

src/tests/IntegrationTests/IntegrationTests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,11 @@
7373
</ItemGroup>
7474
<ItemGroup>
7575
<Compile Include="Auth\LoginTests.cs" />
76+
<Compile Include="BaseTaskManagerTest.cs" />
7677
<Compile Include="Events\RepositoryManagerTests.cs" />
7778
<Compile Include="Events\RepositoryWatcherTests.cs" />
7879
<Compile Include="BaseGitEnvironmentTest.cs" />
79-
<Compile Include="BaseGitRepoTest.cs" />
80+
<Compile Include="BasePlatformIntegrationTest.cs" />
8081
<Compile Include="BaseIntegrationTest.cs" />
8182
<Compile Include="GitClientTests.cs" />
8283
<Compile Include="Git\GitSetupTests.cs" />

0 commit comments

Comments
 (0)