1111
1212namespace BenchmarkDotNet . IntegrationTests . Diagnosers ;
1313
14- public abstract class BaseMockInProcessDiagnoser : IInProcessDiagnoser
14+ public abstract class BaseMockInProcessDiagnoser ( RunMode runMode ) : IInProcessDiagnoser
1515{
16- public static Queue < BaseMockInProcessDiagnoser > s_completedResults = new ( ) ;
16+ public static Queue < string > s_completedResults = new ( ) ;
1717
1818 public Dictionary < BenchmarkCase , string > Results { get ; } = [ ] ;
1919
20- public abstract string DiagnoserName { get ; }
21- public abstract RunMode DiagnoserRunMode { get ; }
22- public abstract string ExpectedResult { get ; }
20+ public RunMode RunMode { get ; } = runMode ;
21+ public string ExpectedResult => $ "MockResult-{ RunMode } ";
2322
24- public IEnumerable < string > Ids => [ DiagnoserName ] ;
23+ public IEnumerable < string > Ids => [ GetType ( ) . Name ] ;
2524
2625 public IEnumerable < IExporter > Exporters => [ ] ;
2726
2827 public IEnumerable < IAnalyser > Analysers => [ ] ;
2928
30- public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ DiagnoserName } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
29+ public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ GetType ( ) . Name } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
3130
32- public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => DiagnoserRunMode ;
31+ public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => RunMode ;
3332
3433 public void Handle ( HostSignal signal , DiagnoserActionParameters parameters ) { }
3534
3635 public IEnumerable < Metric > ProcessResults ( DiagnoserResults results ) => [ ] ;
3736
3837 public IEnumerable < ValidationError > Validate ( ValidationParameters validationParameters ) => [ ] ;
3938
40- public abstract ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase ) ;
39+ public ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
40+ => RunMode == RunMode . None
41+ ? default
42+ : ( typeof ( MockInProcessDiagnoserHandler ) , ExpectedResult ) ;
4143
4244 public virtual IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
4345 {
4446 var ( handlerType , serializedConfig ) = GetSeparateProcessHandlerTypeAndSerializedConfig ( benchmarkCase ) ;
4547 if ( handlerType == null )
48+ {
4649 return null ;
50+ }
4751 var handler = ( IInProcessDiagnoserHandler ) Activator . CreateInstance ( handlerType ) ;
4852 handler . Initialize ( serializedConfig ) ;
4953 return handler ;
@@ -52,16 +56,14 @@ public void Handle(HostSignal signal, DiagnoserActionParameters parameters) { }
5256 public void DeserializeResults ( BenchmarkCase benchmarkCase , string results )
5357 {
5458 Results . Add ( benchmarkCase , results ) ;
55- s_completedResults . Enqueue ( this ) ;
59+ s_completedResults . Enqueue ( results ) ;
5660 }
5761}
5862
59- public abstract class BaseMockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
63+ public sealed class MockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
6064{
6165 private string _result ;
6266
63- protected BaseMockInProcessDiagnoserHandler ( ) { }
64-
6567 public void Initialize ( string ? serializedConfig )
6668 {
6769 _result = serializedConfig ?? string . Empty ;
@@ -72,61 +74,7 @@ public void Handle(BenchmarkSignal signal, InProcessDiagnoserActionArgs args) {
7274 public string SerializeResults ( ) => _result ;
7375}
7476
75- public sealed class MockInProcessDiagnoser : BaseMockInProcessDiagnoser
76- {
77- public override string DiagnoserName => nameof ( MockInProcessDiagnoser ) ;
78- public override RunMode DiagnoserRunMode => RunMode . NoOverhead ;
79- public override string ExpectedResult => "MockResult" ;
80-
81- public override ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
82- => ( typeof ( MockInProcessDiagnoserHandler ) , ExpectedResult ) ;
83- }
84-
85- public sealed class MockInProcessDiagnoserHandler : BaseMockInProcessDiagnoserHandler
86- {
87- }
88-
89- public sealed class MockInProcessDiagnoserExtraRun : BaseMockInProcessDiagnoser
90- {
91- public override string DiagnoserName => nameof ( MockInProcessDiagnoserExtraRun ) ;
92- public override RunMode DiagnoserRunMode => RunMode . ExtraRun ;
93- public override string ExpectedResult => "ExtraRunResult" ;
94-
95- public override ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
96- => ( typeof ( MockInProcessDiagnoserExtraRunHandler ) , ExpectedResult ) ;
97- }
98-
99- public sealed class MockInProcessDiagnoserExtraRunHandler : BaseMockInProcessDiagnoserHandler
100- {
101- }
102-
103- public sealed class MockInProcessDiagnoserNone : BaseMockInProcessDiagnoser
104- {
105- public override string DiagnoserName => nameof ( MockInProcessDiagnoserNone ) ;
106- public override RunMode DiagnoserRunMode => RunMode . None ;
107- public override string ExpectedResult => "NoneResult" ;
108-
109- public override ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
110- => default ; // Returns default when RunMode is None
111-
112- public override IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
113- => null ; // Returns null when RunMode is None
114- }
115-
116- public sealed class MockInProcessDiagnoserNoneHandler : BaseMockInProcessDiagnoserHandler
117- {
118- }
119-
120- public sealed class MockInProcessDiagnoserSeparateLogic : BaseMockInProcessDiagnoser
121- {
122- public override string DiagnoserName => nameof ( MockInProcessDiagnoserSeparateLogic ) ;
123- public override RunMode DiagnoserRunMode => RunMode . SeparateLogic ;
124- public override string ExpectedResult => "SeparateLogicResult" ;
125-
126- public override ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
127- => ( typeof ( MockInProcessDiagnoserSeparateLogicHandler ) , ExpectedResult ) ;
128- }
129-
130- public sealed class MockInProcessDiagnoserSeparateLogicHandler : BaseMockInProcessDiagnoserHandler
131- {
132- }
77+ // Diagnosers are made unique per-type rather than per-instance, so we have to create separate types to test multiple.
78+ public sealed class MockInProcessDiagnoser1 ( RunMode runMode ) : BaseMockInProcessDiagnoser ( runMode ) { }
79+ public sealed class MockInProcessDiagnoser2 ( RunMode runMode ) : BaseMockInProcessDiagnoser ( runMode ) { }
80+ public sealed class MockInProcessDiagnoser3 ( RunMode runMode ) : BaseMockInProcessDiagnoser ( runMode ) { }
0 commit comments