Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d058c7b

Browse files
authored
Issue2394 multiple markdown exporters not possible even with different names (#2395)
* Merge exporters by exporter.Name instead of exporter.GetType() * Added test that MarkdownExporter.GitHub and MarkdownExporter.Atlassian are both accepted in the merged configuration
1 parent 2c999b9 commit d058c7b

File tree

2 files changed

+28
-15
lines changed

2 files changed

+28
-15
lines changed

src/BenchmarkDotNet/Configs/ImmutableConfigBuilder.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,28 +109,28 @@ void AddWarning(string message)
109109
configAnalyse.Add(conclusion);
110110
}
111111

112-
var mergeDictionary = new Dictionary<System.Type, IExporter>();
112+
var mergeDictionary = new Dictionary<string, IExporter>();
113113

114114
foreach (var exporter in exporters)
115115
{
116-
var exporterType = exporter.GetType();
117-
if (mergeDictionary.ContainsKey(exporterType))
116+
var exporterName = exporter.Name;
117+
if (mergeDictionary.ContainsKey(exporterName))
118118
{
119-
AddWarning($"The exporter {exporterType} is already present in configuration. There may be unexpected results.");
119+
AddWarning($"The exporter {exporterName} is already present in configuration. There may be unexpected results.");
120120
}
121-
mergeDictionary[exporterType] = exporter;
121+
mergeDictionary[exporterName] = exporter;
122122
}
123123

124124

125125
foreach (var diagnoser in uniqueDiagnosers)
126126
foreach (var exporter in diagnoser.Exporters)
127127
{
128-
var exporterType = exporter.GetType();
129-
if (mergeDictionary.ContainsKey(exporterType))
128+
var exporterName = exporter.Name;
129+
if (mergeDictionary.ContainsKey(exporterName))
130130
{
131-
AddWarning($"The exporter {exporterType} of {diagnoser.GetType().Name} is already present in configuration. There may be unexpected results.");
131+
AddWarning($"The exporter {exporterName} of {diagnoser.GetType().Name} is already present in configuration. There may be unexpected results.");
132132
}
133-
mergeDictionary[exporterType] = exporter;
133+
mergeDictionary[exporterName] = exporter;
134134
}
135135

136136
var result = mergeDictionary.Values.ToList();
@@ -143,7 +143,7 @@ void AddWarning(string message)
143143
if (hardwareCounterDiagnoser != default(IHardwareCountersDiagnoser) && disassemblyDiagnoser != default(DisassemblyDiagnoser))
144144
result.Add(new InstructionPointerExporter(hardwareCounterDiagnoser, disassemblyDiagnoser));
145145

146-
for (int i = result.Count - 1; i >=0; i--)
146+
for (int i = result.Count - 1; i >= 0; i--)
147147
if (result[i] is IExporterDependencies exporterDependencies)
148148
foreach (var dependency in exporterDependencies.Dependencies)
149149
/*
@@ -165,7 +165,7 @@ void AddWarning(string message)
165165
* "The CsvMeasurementsExporter is already present in the configuration. There may be unexpected results of RPlotExporter.
166166
*
167167
*/
168-
if (!result.Any(exporter=> exporter.GetType() == dependency.GetType()))
168+
if (!result.Any(exporter => exporter.GetType() == dependency.GetType()))
169169
result.Insert(i, dependency); // All the exporter dependencies should be added before the exporter
170170
else
171171
{
@@ -186,9 +186,9 @@ private static ImmutableHashSet<IAnalyser> GetAnalysers(IEnumerable<IAnalyser> a
186186
builder.Add(analyser);
187187

188188
foreach (var diagnoser in uniqueDiagnosers)
189-
foreach (var analyser in diagnoser.Analysers)
190-
if (!builder.Contains(analyser))
191-
builder.Add(analyser);
189+
foreach (var analyser in diagnoser.Analysers)
190+
if (!builder.Contains(analyser))
191+
builder.Add(analyser);
192192

193193
return builder.ToImmutable();
194194
}

tests/BenchmarkDotNet.Tests/Configs/ImmutableConfigTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,19 @@ public void DuplicateExportersAreExcluded()
143143
Assert.Same(MarkdownExporter.GitHub, final.GetExporters().Single());
144144
}
145145

146+
[Fact]
147+
public void MultipleExportersOfSameTypeWithDifferentNamesAreAccepted()
148+
{
149+
var mutable = ManualConfig.CreateEmpty();
150+
151+
mutable.AddExporter(MarkdownExporter.GitHub);
152+
mutable.AddExporter(MarkdownExporter.Atlassian);
153+
154+
var final = ImmutableConfigBuilder.Create(mutable);
155+
156+
Assert.Equal(2, final.GetExporters().Count());
157+
}
158+
146159
[Fact]
147160
public void DuplicateAnalyzersAreExcluded()
148161
{
@@ -380,7 +393,7 @@ private static ImmutableConfig[] AddLeftToTheRightAndRightToTheLef(ManualConfig
380393
var leftAddedToTheRight = ManualConfig.Create(right);
381394
leftAddedToTheRight.Add(left);
382395

383-
return new[]{ rightAddedToLeft.CreateImmutableConfig(), leftAddedToTheRight.CreateImmutableConfig() };
396+
return new[] { rightAddedToLeft.CreateImmutableConfig(), leftAddedToTheRight.CreateImmutableConfig() };
384397
}
385398

386399
public class TestExporter : IExporter, IExporterDependencies

0 commit comments

Comments
 (0)