1111
1212namespace BenchmarkDotNet . IntegrationTests . Diagnosers ;
1313
14- public sealed class MockInProcessDiagnoser : IInProcessDiagnoser
14+ public abstract class BaseMockInProcessDiagnoser : IInProcessDiagnoser
1515{
1616 public Dictionary < BenchmarkCase , string > Results { get ; } = [ ] ;
1717
18- public IEnumerable < string > Ids => [ nameof ( MockInProcessDiagnoser ) ] ;
18+ public abstract string DiagnoserName { get ; }
19+ public abstract RunMode DiagnoserRunMode { get ; }
20+ public abstract Type HandlerType { get ; }
21+ public abstract string ExpectedResult { get ; }
22+
23+ public IEnumerable < string > Ids => [ DiagnoserName ] ;
1924
2025 public IEnumerable < IExporter > Exporters => [ ] ;
2126
2227 public IEnumerable < IAnalyser > Analysers => [ ] ;
2328
24- public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ nameof ( MockInProcessDiagnoser ) } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
29+ public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ DiagnoserName } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
2530
26- public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => RunMode . NoOverhead ;
31+ public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => DiagnoserRunMode ;
2732
2833 public void Handle ( HostSignal signal , DiagnoserActionParameters parameters ) { }
2934
3035 public IEnumerable < Metric > ProcessResults ( DiagnoserResults results ) => [ ] ;
3136
3237 public IEnumerable < ValidationError > Validate ( ValidationParameters validationParameters ) => [ ] ;
3338
34- public ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
35- => ( typeof ( MockInProcessDiagnoserHandler ) , null ) ;
39+ public virtual ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
40+ => ( HandlerType , null ) ;
3641
37- public IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
38- => new MockInProcessDiagnoserHandler ( ) ;
42+ public virtual IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
43+ => ( IInProcessDiagnoserHandler ) Activator . CreateInstance ( HandlerType , ExpectedResult ) ;
3944
4045 public void DeserializeResults ( BenchmarkCase benchmarkCase , string results ) => Results . Add ( benchmarkCase , results ) ;
4146}
4247
43- public sealed class MockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
48+ public abstract class BaseMockInProcessDiagnoserHandler : IInProcessDiagnoserHandler
4449{
50+ private readonly string _result ;
51+
52+ protected BaseMockInProcessDiagnoserHandler ( string result ) => _result = result ;
53+
4554 public void Initialize ( string ? serializedConfig ) { }
4655
4756 public void Handle ( BenchmarkSignal signal , InProcessDiagnoserActionArgs args ) { }
4857
49- public string SerializeResults ( ) => "MockResult" ;
58+ public string SerializeResults ( ) => _result ;
5059}
5160
52- public sealed class MockInProcessDiagnoserNoOverhead : IInProcessDiagnoser
61+ public sealed class MockInProcessDiagnoser : BaseMockInProcessDiagnoser
5362{
54- public Dictionary < BenchmarkCase , string > Results { get ; } = [ ] ;
55-
56- public IEnumerable < string > Ids => [ nameof ( MockInProcessDiagnoserNoOverhead ) ] ;
57-
58- public IEnumerable < IExporter > Exporters => [ ] ;
59-
60- public IEnumerable < IAnalyser > Analysers => [ ] ;
61-
62- public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ nameof ( MockInProcessDiagnoserNoOverhead ) } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
63-
64- public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => RunMode . NoOverhead ;
65-
66- public void Handle ( HostSignal signal , DiagnoserActionParameters parameters ) { }
67-
68- public IEnumerable < Metric > ProcessResults ( DiagnoserResults results ) => [ ] ;
69-
70- public IEnumerable < ValidationError > Validate ( ValidationParameters validationParameters ) => [ ] ;
71-
72- public ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
73- => ( typeof ( MockInProcessDiagnoserNoOverheadHandler ) , null ) ;
74-
75- public IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
76- => new MockInProcessDiagnoserNoOverheadHandler ( ) ;
77-
78- public void DeserializeResults ( BenchmarkCase benchmarkCase , string results ) => Results . Add ( benchmarkCase , results ) ;
63+ public override string DiagnoserName => nameof ( MockInProcessDiagnoser ) ;
64+ public override RunMode DiagnoserRunMode => RunMode . NoOverhead ;
65+ public override Type HandlerType => typeof ( MockInProcessDiagnoserHandler ) ;
66+ public override string ExpectedResult => "MockResult" ;
7967}
8068
81- public sealed class MockInProcessDiagnoserNoOverheadHandler : IInProcessDiagnoserHandler
69+ public sealed class MockInProcessDiagnoserHandler : BaseMockInProcessDiagnoserHandler
8270{
83- public void Initialize ( string ? serializedConfig ) { }
84-
85- public void Handle ( BenchmarkSignal signal , InProcessDiagnoserActionArgs args ) { }
86-
87- public string SerializeResults ( ) => "NoOverheadResult" ;
71+ public MockInProcessDiagnoserHandler ( string result ) : base ( result ) { }
8872}
8973
90- public sealed class MockInProcessDiagnoserExtraRun : IInProcessDiagnoser
74+ public sealed class MockInProcessDiagnoserNoOverhead : BaseMockInProcessDiagnoser
9175{
92- public Dictionary < BenchmarkCase , string > Results { get ; } = [ ] ;
93-
94- public IEnumerable < string > Ids => [ nameof ( MockInProcessDiagnoserExtraRun ) ] ;
95-
96- public IEnumerable < IExporter > Exporters => [ ] ;
97-
98- public IEnumerable < IAnalyser > Analysers => [ ] ;
99-
100- public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ nameof ( MockInProcessDiagnoserExtraRun ) } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
101-
102- public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => RunMode . ExtraRun ;
103-
104- public void Handle ( HostSignal signal , DiagnoserActionParameters parameters ) { }
105-
106- public IEnumerable < Metric > ProcessResults ( DiagnoserResults results ) => [ ] ;
107-
108- public IEnumerable < ValidationError > Validate ( ValidationParameters validationParameters ) => [ ] ;
109-
110- public ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
111- => ( typeof ( MockInProcessDiagnoserExtraRunHandler ) , null ) ;
112-
113- public IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
114- => new MockInProcessDiagnoserExtraRunHandler ( ) ;
115-
116- public void DeserializeResults ( BenchmarkCase benchmarkCase , string results ) => Results . Add ( benchmarkCase , results ) ;
76+ public override string DiagnoserName => nameof ( MockInProcessDiagnoserNoOverhead ) ;
77+ public override RunMode DiagnoserRunMode => RunMode . NoOverhead ;
78+ public override Type HandlerType => typeof ( MockInProcessDiagnoserNoOverheadHandler ) ;
79+ public override string ExpectedResult => "NoOverheadResult" ;
11780}
11881
119- public sealed class MockInProcessDiagnoserExtraRunHandler : IInProcessDiagnoserHandler
82+ public sealed class MockInProcessDiagnoserNoOverheadHandler : BaseMockInProcessDiagnoserHandler
12083{
121- public void Initialize ( string ? serializedConfig ) { }
122-
123- public void Handle ( BenchmarkSignal signal , InProcessDiagnoserActionArgs args ) { }
124-
125- public string SerializeResults ( ) => "ExtraRunResult" ;
84+ public MockInProcessDiagnoserNoOverheadHandler ( string result ) : base ( result ) { }
12685}
12786
128- public sealed class MockInProcessDiagnoserNone : IInProcessDiagnoser
87+ public sealed class MockInProcessDiagnoserExtraRun : BaseMockInProcessDiagnoser
12988{
130- public Dictionary < BenchmarkCase , string > Results { get ; } = [ ] ;
131-
132- public IEnumerable < string > Ids => [ nameof ( MockInProcessDiagnoserNone ) ] ;
133-
134- public IEnumerable < IExporter > Exporters => [ ] ;
135-
136- public IEnumerable < IAnalyser > Analysers => [ ] ;
137-
138- public void DisplayResults ( ILogger logger ) => logger . WriteLine ( $ "{ nameof ( MockInProcessDiagnoserNone ) } results: [{ string . Join ( ", " , Results . Values ) } ]") ;
139-
140- public RunMode GetRunMode ( BenchmarkCase benchmarkCase ) => RunMode . None ;
141-
142- public void Handle ( HostSignal signal , DiagnoserActionParameters parameters ) { }
89+ public override string DiagnoserName => nameof ( MockInProcessDiagnoserExtraRun ) ;
90+ public override RunMode DiagnoserRunMode => RunMode . ExtraRun ;
91+ public override Type HandlerType => typeof ( MockInProcessDiagnoserExtraRunHandler ) ;
92+ public override string ExpectedResult => "ExtraRunResult" ;
93+ }
14394
144- public IEnumerable < Metric > ProcessResults ( DiagnoserResults results ) => [ ] ;
95+ public sealed class MockInProcessDiagnoserExtraRunHandler : BaseMockInProcessDiagnoserHandler
96+ {
97+ public MockInProcessDiagnoserExtraRunHandler ( string result ) : base ( result ) { }
98+ }
14599
146- public IEnumerable < ValidationError > Validate ( ValidationParameters validationParameters ) => [ ] ;
100+ public sealed class MockInProcessDiagnoserNone : BaseMockInProcessDiagnoser
101+ {
102+ public override string DiagnoserName => nameof ( MockInProcessDiagnoserNone ) ;
103+ public override RunMode DiagnoserRunMode => RunMode . None ;
104+ public override Type HandlerType => typeof ( MockInProcessDiagnoserNoneHandler ) ;
105+ public override string ExpectedResult => "NoneResult" ;
147106
148- public ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
107+ public override ( Type ? handlerType , string ? serializedConfig ) GetSeparateProcessHandlerTypeAndSerializedConfig ( BenchmarkCase benchmarkCase )
149108 => default ; // Returns default when RunMode is None
150109
151- public IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
110+ public override IInProcessDiagnoserHandler ? GetSameProcessHandler ( BenchmarkCase benchmarkCase )
152111 => null ; // Returns null when RunMode is None
112+ }
153113
154- public void DeserializeResults ( BenchmarkCase benchmarkCase , string results ) => Results . Add ( benchmarkCase , results ) ;
114+ public sealed class MockInProcessDiagnoserNoneHandler : BaseMockInProcessDiagnoserHandler
115+ {
116+ public MockInProcessDiagnoserNoneHandler ( string result ) : base ( result ) { }
155117}
0 commit comments