Skip to content

Commit ae54d7b

Browse files
committed
OrderShouldNotMessWithAddTool
1 parent c866473 commit ae54d7b

4 files changed

Lines changed: 43 additions & 11 deletions

File tree

docs/diff-tool.custom.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var resolvedTool = DiffTools.AddTool(
2020
requiresTarget: true,
2121
arguments: (temp, target) => $"\"{temp}\" \"{target}\"",
2222
exePath: diffToolPath,
23-
binaryExtensions: new[] {"jpg"});
23+
binaryExtensions: new[] {"jpg"})!;
2424
```
2525
<sup><a href='/src/DiffEngine.Tests/DiffToolsTest.cs#L23-L33' title='File snippet `addtool` was extracted from'>snippet source</a> | <a href='#snippet-addtool' title='Navigate to start of snippet `addtool`'>anchor</a></sup>
2626
<!-- endsnippet -->
@@ -39,5 +39,5 @@ var resolvedTool = DiffTools.AddToolBasedOn(
3939
name: "MyCustomDiffTool",
4040
arguments: (temp, target) => $"\"custom args {temp}\" \"{target}\"");
4141
```
42-
<sup><a href='/src/DiffEngine.Tests/DiffToolsTest.cs#L43-L48' title='File snippet `addtoolbasedon` was extracted from'>snippet source</a> | <a href='#snippet-addtoolbasedon' title='Navigate to start of snippet `addtoolbasedon`'>anchor</a></sup>
42+
<sup><a href='/src/DiffEngine.Tests/DiffToolsTest.cs#L62-L67' title='File snippet `addtoolbasedon` was extracted from'>snippet source</a> | <a href='#snippet-addtoolbasedon' title='Navigate to start of snippet `addtoolbasedon`'>anchor</a></sup>
4343
<!-- endsnippet -->

docs/diff-tool.order.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,5 @@ For example `VisualStudio,Meld` will result in VisualStudio then Meld then all o
4747
```cs
4848
DiffTools.UseOrder(DiffTool.VisualStudio, DiffTool.AraxisMerge);
4949
```
50-
<sup><a href='/src/DiffEngine.Tests/DiffToolsTest.cs#L83-L85' title='File snippet `useorder` was extracted from'>snippet source</a> | <a href='#snippet-useorder' title='Navigate to start of snippet `useorder`'>anchor</a></sup>
50+
<sup><a href='/src/DiffEngine.Tests/DiffToolsTest.cs#L102-L104' title='File snippet `useorder` was extracted from'>snippet source</a> | <a href='#snippet-useorder' title='Navigate to start of snippet `useorder`'>anchor</a></sup>
5151
<!-- endsnippet -->

src/DiffEngine.Tests/DiffToolsTest.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,30 @@ public void AddTool()
2929
requiresTarget: true,
3030
arguments: (temp, target) => $"\"{temp}\" \"{target}\"",
3131
exePath: diffToolPath,
32-
binaryExtensions: new[] {"jpg"});
32+
binaryExtensions: new[] {"jpg"})!;
3333
#endregion
34-
Assert.Equal(resolvedTool, DiffTools.Resolved.First());
34+
Assert.Equal(resolvedTool.Name, DiffTools.Resolved.First().Name);
3535
Assert.True(DiffTools.TryFind("jpg", out var forExtension));
36-
Assert.Equal(resolvedTool, forExtension);
36+
Assert.Equal(resolvedTool.Name, forExtension!.Name);
37+
}
38+
39+
[Fact]
40+
public void OrderShouldNotMessWithAddTool()
41+
{
42+
string diffToolPath = FakeDiffTool.Exe;
43+
var resolvedTool = DiffTools.AddTool(
44+
name: "MyCustomDiffTool",
45+
autoRefresh: true,
46+
isMdi: false,
47+
supportsText: true,
48+
requiresTarget: true,
49+
arguments: (temp, target) => $"\"{temp}\" \"{target}\"",
50+
exePath: diffToolPath,
51+
binaryExtensions: Enumerable.Empty<string>())!;
52+
DiffTools.UseOrder(DiffTool.VisualStudio, DiffTool.AraxisMerge);
53+
Assert.Equal(resolvedTool.Name, DiffTools.Resolved.First().Name);
54+
Assert.True(DiffTools.TryFind("txt", out var forExtension));
55+
Assert.Equal(resolvedTool.Name, forExtension!.Name);
3756
}
3857

3958
#if DEBUG

src/DiffEngine/DiffTools.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,21 @@ public static class DiffTools
119119
return null;
120120
}
121121

122-
var binariesList = binaries.ToList();
123-
var resolvedTool = new ResolvedTool(name, diffTool, resolvedExePath, arguments, isMdi, autoRefresh, binariesList, requiresTarget, supportsText);
122+
var resolvedTool = new ResolvedTool(name, diffTool, resolvedExePath, arguments, isMdi, autoRefresh, binaries.ToList(), requiresTarget, supportsText);
124123

124+
AddResolvedToolAtStart(resolvedTool);
125+
126+
return resolvedTool;
127+
}
128+
129+
static void AddResolvedToolAtStart(ResolvedTool resolvedTool)
130+
{
125131
resolved.Insert(0, resolvedTool);
126-
foreach (var extension in binariesList)
132+
foreach (var extension in resolvedTool.BinaryExtensions)
127133
{
128134
var cleanedExtension = Extensions.GetExtension(extension);
129135
ExtensionLookup[cleanedExtension] = resolvedTool;
130136
}
131-
132-
return resolvedTool;
133137
}
134138

135139
static DiffTools()
@@ -139,20 +143,29 @@ static DiffTools()
139143

140144
internal static void Reset()
141145
{
146+
ExtensionLookup.Clear();
147+
resolved.Clear();
142148
var result = OrderReader.ReadToolOrder();
143149

144150
InitTools(result.FoundInEnvVar, result.Order);
145151
}
146152

147153
static void InitTools(bool resultFoundInEnvVar, IEnumerable<DiffTool> tools)
148154
{
155+
var custom = resolved.Where(x=>x.Tool == null).ToList();
149156
ExtensionLookup.Clear();
150157
resolved.Clear();
151158

152159
foreach (var tool in ToolsOrder.Sort(resultFoundInEnvVar, tools).Reverse())
153160
{
154161
AddTool(tool.Tool.ToString(), tool.Tool, tool.AutoRefresh, tool.IsMdi, tool.SupportsText, tool.RequiresTarget, tool.BinaryExtensions, tool.Windows, tool.Linux, tool.Osx);
155162
}
163+
164+
custom.Reverse();
165+
foreach (var tool in custom)
166+
{
167+
AddResolvedToolAtStart(tool);
168+
}
156169
}
157170

158171
public static void UseOrder(params DiffTool[] order)

0 commit comments

Comments
 (0)