33using System . Collections . Generic ;
44using System . Data ;
55using System . IO ;
6+ using System . Threading . Tasks ;
67using System . Xml . Serialization ;
78
89namespace utPLSQL
@@ -12,39 +13,46 @@ namespace utPLSQL
1213 /// </summary>
1314 public class RealTimeTestRunner : TestRunner < @event >
1415 {
15- public override void RunTests ( params string [ ] paths )
16+ public override async Task RunTestsAsync ( List < string > paths , Action < @event > consumer )
1617 {
17- if ( paths != null && paths . Length > 0 )
18+ if ( paths != null && paths . Count > 0 )
1819 {
19- realtimeReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
20+ string realtimeReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
2021
21- var proc = $@ "DECLARE
22- l_reporter ut_realtime_reporter := ut_realtime_reporter();
23- BEGIN
24- l_reporter.set_reporter_id(:id);
25- l_reporter.output_buffer.init();
26- ut_runner.run(a_paths => ut_varchar2_list({ ConvertToUtVarchar2List ( new List < string > ( paths ) ) } ),
27- a_reporters => ut_reporters(l_reporter));
28- END;" ;
29-
30- var cmd = new OracleCommand ( proc , produceConnection ) ;
31- runningCommands . Add ( cmd ) ;
32-
33- cmd . Parameters . Add ( "id" , OracleDbType . Varchar2 , ParameterDirection . Input ) . Value = realtimeReporterId ;
34- cmd . ExecuteNonQuery ( ) ;
22+ await UtRunAsync ( realtimeReporterId , paths ) ;
3523
36- runningCommands . Remove ( cmd ) ;
37- cmd . Dispose ( ) ;
24+ await ConsumeResultAsync ( realtimeReporterId , consumer ) ;
3825 }
3926 }
4027
41- public override void RunTestsWithCoverage ( List < string > paths , List < string > coverageSchemas = null , List < string > includeObjects = null , List < string > excludeObjects = null )
28+ public override async Task RunTestsAsync ( string path , Action < @event > consumer )
29+ {
30+ await RunTestsAsync ( new List < string > ( ) { path } , consumer ) ;
31+ }
32+
33+ public override async Task < string > RunTestsWithCoverageAsync ( List < string > paths , Action < @event > consumer , List < string > coverageSchemas = null , List < string > includeObjects = null , List < string > excludeObjects = null )
4234 {
4335 if ( paths != null && paths . Count > 0 )
4436 {
45- realtimeReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
46- coverageReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
37+ string realtimeReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
38+ string coverageReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
39+
40+ await UtRunWithCoverageAsync ( realtimeReporterId , coverageReporterId , paths , coverageSchemas , includeObjects , excludeObjects ) ;
41+
42+ await ConsumeResultAsync ( realtimeReporterId , consumer ) ;
43+
44+ return await GetCoverageReportAsync ( coverageReporterId ) ;
45+ }
46+ else
47+ {
48+ return null ;
49+ }
50+ }
4751
52+ private async Task UtRunWithCoverageAsync ( string realtimeReporterId , string coverageReporterId , List < string > paths , List < string > coverageSchemas , List < string > includeObjects , List < string > excludeObjects )
53+ {
54+ await Task . Run ( ( ) =>
55+ {
4856 var proc = $@ "DECLARE
4957 l_rt_rep ut_realtime_reporter := ut_realtime_reporter();
5058 l_cov_rep ut_coverage_html_reporter := ut_coverage_html_reporter();
@@ -85,47 +93,74 @@ public override void RunTestsWithCoverage(List<string> paths, List<string> cover
8593
8694 runningCommands . Remove ( cmd ) ;
8795 cmd . Dispose ( ) ;
88- }
96+ } ) ;
8997 }
9098
91- public override void RunTestsWithCoverage ( string path , string coverageSchema = null , List < string > includeObjects = null , List < string > excludeObjects = null )
99+ public override async Task < string > RunTestsWithCoverageAsync ( string path , Action < @event > consumer , string coverageSchema = null , List < string > includeObjects = null , List < string > excludeObjects = null )
92100 {
93- this . RunTestsWithCoverage ( new List < string > ( ) { path } , new List < string > ( ) { coverageSchema } , includeObjects , excludeObjects ) ;
101+ return await RunTestsWithCoverageAsync ( new List < string > ( ) { path } , consumer , new List < string > ( ) { coverageSchema } , includeObjects , excludeObjects ) ;
94102 }
95103
96- public override void ConsumeResult ( Action < @event > action )
104+ private async Task UtRunAsync ( string id , List < string > paths )
97105 {
98- var proc = @"DECLARE
106+ await Task . Run ( ( ) =>
107+ {
108+ var proc = $@ "DECLARE
109+ l_reporter ut_realtime_reporter := ut_realtime_reporter();
110+ BEGIN
111+ l_reporter.set_reporter_id(:id);
112+ l_reporter.output_buffer.init();
113+ ut_runner.run(a_paths => ut_varchar2_list({ ConvertToUtVarchar2List ( new List < string > ( paths ) ) } ),
114+ a_reporters => ut_reporters(l_reporter));
115+ END;" ;
116+
117+ var cmd = new OracleCommand ( proc , produceConnection ) ;
118+ runningCommands . Add ( cmd ) ;
119+
120+ cmd . Parameters . Add ( "id" , OracleDbType . Varchar2 , ParameterDirection . Input ) . Value = id ;
121+ cmd . ExecuteNonQuery ( ) ;
122+
123+ runningCommands . Remove ( cmd ) ;
124+ cmd . Dispose ( ) ;
125+ } ) ;
126+ }
127+
128+ private async Task ConsumeResultAsync ( string id , Action < @event > action )
129+ {
130+ await Task . Run ( ( ) =>
131+ {
132+ var proc = @"DECLARE
99133 l_reporter ut_realtime_reporter := ut_realtime_reporter();
100134 BEGIN
101135 l_reporter.set_reporter_id(:id);
102136 :lines_cursor := l_reporter.get_lines_cursor();
103137 END;" ;
104138
105- var cmd = new OracleCommand ( proc , consumeConnection ) ;
106- runningCommands . Add ( cmd ) ;
139+ var cmd = new OracleCommand ( proc , consumeConnection ) ;
140+ runningCommands . Add ( cmd ) ;
107141
108- cmd . Parameters . Add ( "id" , OracleDbType . Varchar2 , ParameterDirection . Input ) . Value = realtimeReporterId ;
109- cmd . Parameters . Add ( "lines_cursor" , OracleDbType . RefCursor , ParameterDirection . Output ) ;
142+ cmd . Parameters . Add ( "id" , OracleDbType . Varchar2 , ParameterDirection . Input ) . Value = id ;
143+ cmd . Parameters . Add ( "lines_cursor" , OracleDbType . RefCursor , ParameterDirection . Output ) ;
110144
111- // https://stackoverflow.com/questions/2226769/bad-performance-with-oracledatareader
112- cmd . InitialLOBFetchSize = - 1 ;
145+ // https://stackoverflow.com/questions/2226769/bad-performance-with-oracledatareader
146+ cmd . InitialLOBFetchSize = - 1 ;
113147
114- var reader = cmd . ExecuteReader ( ) ;
115- while ( reader . Read ( ) )
116- {
117- var xml = reader . GetString ( 0 ) ;
148+ var reader = cmd . ExecuteReader ( ) ;
149+ while ( reader . Read ( ) )
150+ {
151+ var xml = reader . GetString ( 0 ) ;
118152
119- var serializer = new XmlSerializer ( typeof ( @event ) ) ;
120- var @event = ( @event ) serializer . Deserialize ( new StringReader ( xml ) ) ;
153+ var serializer = new XmlSerializer ( typeof ( @event ) ) ;
154+ var @event = ( @event ) serializer . Deserialize ( new StringReader ( xml ) ) ;
121155
122- action . Invoke ( @event ) ;
123- }
156+ action . Invoke ( @event ) ;
157+ }
124158
125- reader . Close ( ) ;
159+ reader . Close ( ) ;
126160
127- runningCommands . Remove ( cmd ) ;
128- cmd . Dispose ( ) ;
161+ runningCommands . Remove ( cmd ) ;
162+ cmd . Dispose ( ) ;
163+ } ) ;
129164 }
130165 }
131166}
0 commit comments