3
3
using System . Collections . Generic ;
4
4
using System . Data ;
5
5
using System . IO ;
6
+ using System . Threading . Tasks ;
6
7
using System . Xml . Serialization ;
7
8
8
9
namespace utPLSQL
@@ -12,39 +13,46 @@ namespace utPLSQL
12
13
/// </summary>
13
14
public class RealTimeTestRunner : TestRunner < @event >
14
15
{
15
- public override void RunTests ( params string [ ] paths )
16
+ public override async Task RunTestsAsync ( List < string > paths , Action < @event > consumer )
16
17
{
17
- if ( paths != null && paths . Length > 0 )
18
+ if ( paths != null && paths . Count > 0 )
18
19
{
19
- realtimeReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
20
+ string realtimeReporterId = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , "" ) ;
20
21
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 ) ;
35
23
36
- runningCommands . Remove ( cmd ) ;
37
- cmd . Dispose ( ) ;
24
+ await ConsumeResultAsync ( realtimeReporterId , consumer ) ;
38
25
}
39
26
}
40
27
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 )
42
34
{
43
35
if ( paths != null && paths . Count > 0 )
44
36
{
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
+ }
47
51
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
+ {
48
56
var proc = $@ "DECLARE
49
57
l_rt_rep ut_realtime_reporter := ut_realtime_reporter();
50
58
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
85
93
86
94
runningCommands . Remove ( cmd ) ;
87
95
cmd . Dispose ( ) ;
88
- }
96
+ } ) ;
89
97
}
90
98
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 )
92
100
{
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 ) ;
94
102
}
95
103
96
- public override void ConsumeResult ( Action < @event > action )
104
+ private async Task UtRunAsync ( string id , List < string > paths )
97
105
{
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
99
133
l_reporter ut_realtime_reporter := ut_realtime_reporter();
100
134
BEGIN
101
135
l_reporter.set_reporter_id(:id);
102
136
:lines_cursor := l_reporter.get_lines_cursor();
103
137
END;" ;
104
138
105
- var cmd = new OracleCommand ( proc , consumeConnection ) ;
106
- runningCommands . Add ( cmd ) ;
139
+ var cmd = new OracleCommand ( proc , consumeConnection ) ;
140
+ runningCommands . Add ( cmd ) ;
107
141
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 ) ;
110
144
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 ;
113
147
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 ) ;
118
152
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 ) ) ;
121
155
122
- action . Invoke ( @event ) ;
123
- }
156
+ action . Invoke ( @event ) ;
157
+ }
124
158
125
- reader . Close ( ) ;
159
+ reader . Close ( ) ;
126
160
127
- runningCommands . Remove ( cmd ) ;
128
- cmd . Dispose ( ) ;
161
+ runningCommands . Remove ( cmd ) ;
162
+ cmd . Dispose ( ) ;
163
+ } ) ;
129
164
}
130
165
}
131
166
}
0 commit comments