1111
1212namespace BenchmarkDotNet . IntegrationTests . Diagnosers ;
1313
14- public sealed class MockInProcessDiagnoser : IInProcessDiagnoser
14+ public abstract class BaseMockInProcessDiagnoser : IInProcessDiagnoser
1515{
16+ public static Queue < BaseMockInProcessDiagnoser > s_completedResults = new ( ) ;
17+
1618 public Dictionary < BenchmarkCase , string > Results { get ; } = [ ] ;
1719
18- public IEnumerable < string > Ids => [ nameof ( MockInProcessDiagnoser ) ] ;
20+ public abstract string DiagnoserName { get ; }
21+ public abstract RunMode DiagnoserRunMode { get ; }
22+ public abstract string ExpectedResult { get ; }
23+
24+ public IEnumerable < string > Ids => [ DiagnoserName ] ;
1925
2026 public IEnumerable < IExporter > Exporters => [ ] ;
2127
2228 public IEnumerable < IAnalyser > Analysers => [ ] ;
2329
24- public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ nameof ( MockInProcessDiagnoser ) } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
30+ public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ DiagnoserName } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
2531
26- public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => RunMode . NoOverhead ;
32+ public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => DiagnoserRunMode ;
2733
2834 public void Handle ( HostSignal signal , DiagnoserActionParameters parameters ) { }
2935
3036 public IEnumerable < Metric > ProcessResults ( DiagnoserResults results ) => [ ] ;
3137
3238 public IEnumerable < ValidationError > Validate ( ValidationParameters validationParameters ) => [ ] ;
3339
34- public ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
35- => ( typeof ( MockInProcessDiagnoserHandler ) , null ) ;
40+ public abstract ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase ) ;
41+
42+ public virtual IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
43+ {
44+ var ( handlerType , serializedConfig ) = GetSeparateProcessHandlerTypeAndSerializedConfig ( benchmarkCase ) ;
45+ if ( handlerType == null )
46+ return null ;
47+ var handler = ( IInProcessDiagnoserHandler ) Activator . CreateInstance ( handlerType ) ;
48+ handler . Initialize ( serializedConfig ) ;
49+ return handler ;
50+ }
51+
52+ public void DeserializeResults ( BenchmarkCase benchmarkCase , string results )
53+ {
54+ Results . Add ( benchmarkCase , results ) ;
55+ s_completedResults . Enqueue ( this ) ;
56+ }
57+ }
58+
59+ public abstract class BaseMockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
60+ {
61+ private string _result ;
3662
37- public IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
38- => new MockInProcessDiagnoserHandler ( ) ;
63+ protected BaseMockInProcessDiagnoserHandler ( ) { }
3964
40- public void DeserializeResults ( BenchmarkCase benchmarkCase , string results ) => Results . Add ( benchmarkCase , results ) ;
65+ public void Initialize ( string ? serializedConfig )
66+ {
67+ _result = serializedConfig ?? string . Empty ;
68+ }
69+
70+ public void Handle ( BenchmarkSignal signal , InProcessDiagnoserActionArgs args ) { }
71+
72+ public string SerializeResults ( ) => _result ;
4173}
4274
43- public sealed class MockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
75+ public sealed class MockInProcessDiagnoser : BaseMockInProcessDiagnoser
4476{
45- public void Initialize ( string ? serializedConfig ) { }
77+ public override string DiagnoserName => nameof ( MockInProcessDiagnoser ) ;
78+ public override RunMode DiagnoserRunMode => RunMode . NoOverhead ;
79+ public override string ExpectedResult => "MockResult" ;
4680
47- public void Handle ( BenchmarkSignal signal , InProcessDiagnoserActionArgs args ) { }
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+ }
4898
49- public string SerializeResults ( ) => "MockResult" ;
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+ {
50132}
0 commit comments