44using System . Drawing ;
55using System . IO ;
66using System . Text ;
7- using System . Threading ;
7+ using System . Threading . Tasks ;
88using System . Windows . Forms ;
99using utPLSQL ;
1010
@@ -39,7 +39,7 @@ public TestRunnerWindow(RealTimeTestRunner testRunner)
3939 gridResults . Columns [ 3 ] . DefaultCellStyle . Alignment = DataGridViewContentAlignment . MiddleRight ;
4040 }
4141
42- internal void RunTests ( string type , string owner , string name , string procedure , bool coverage )
42+ internal async Task RunTestsAsync ( string type , string owner , string name , string procedure , bool coverage )
4343 {
4444 Running = true ;
4545
@@ -55,34 +55,115 @@ internal void RunTests(string type, string owner, string name, string procedure,
5555 DialogResult dialogResult = codeCoverateReportDialog . ShowDialog ( ) ;
5656 if ( dialogResult == DialogResult . OK )
5757 {
58- new Thread ( ( ) =>
59- {
60- var schemas = ConvertToVarcharList ( codeCoverateReportDialog . GetSchemas ( ) ) ;
61- var includes = ConvertToVarcharList ( codeCoverateReportDialog . GetIncludes ( ) ) ;
62- var excludes = ConvertToVarcharList ( codeCoverateReportDialog . GetExcludes ( ) ) ;
63-
64- testRunner . RunTestsWithCoverage ( type , owner , name , procedure , schemas , includes , excludes ) ;
65- } ) . Start ( ) ;
58+ RunWithCoverage ( type , owner , name , procedure , codeCoverateReportDialog ) ;
6659
6760 Show ( ) ;
6861
6962 CollectResults ( coverage ) ;
70- CollectReport ( coverage ) ;
63+ CollectReport ( ) ;
7164 }
7265 }
7366 else
7467 {
75- new Thread ( ( ) =>
76- {
77- testRunner . RunTests ( type , owner , name , procedure ) ;
78- } ) . Start ( ) ;
68+ RunTests ( type , owner , name , procedure ) ;
7969
8070 Show ( ) ;
8171
8272 CollectResults ( coverage ) ;
8373 }
8474 }
8575
76+ private void RunTests ( string type , string owner , string name , string procedure )
77+ {
78+ Task . Factory . StartNew ( ( ) => testRunner . RunTests ( type , owner , name , procedure ) ) ;
79+ }
80+
81+ private void RunWithCoverage ( string type , string owner , string name , string procedure , CodeCoverateReportDialog codeCoverateReportDialog )
82+ {
83+ var schemas = ConvertToVarcharList ( codeCoverateReportDialog . GetSchemas ( ) ) ;
84+ var includes = ConvertToVarcharList ( codeCoverateReportDialog . GetIncludes ( ) ) ;
85+ var excludes = ConvertToVarcharList ( codeCoverateReportDialog . GetExcludes ( ) ) ;
86+
87+ Task . Factory . StartNew ( ( ) => testRunner . RunTestsWithCoverage ( type , owner , name , procedure , schemas , includes , excludes ) ) ;
88+ }
89+
90+ private void CollectResults ( bool coverage )
91+ {
92+ var completetedTests = 0 ;
93+
94+ Task . Factory . StartNew ( ( ) => testRunner . ConsumeResult ( @event =>
95+ {
96+ gridResults . BeginInvoke ( ( MethodInvoker ) delegate ( )
97+ {
98+ if ( @event . type . Equals ( "pre-run" ) )
99+ {
100+ totalNumberOfTests = @event . totalNumberOfTests ;
101+
102+ progressBar . Minimum = 0 ;
103+ progressBar . Maximum = totalNumberOfTests * STEPS ;
104+ progressBar . Step = STEPS ;
105+
106+ CreateTestResults ( @event ) ;
107+
108+ gridResults . Rows [ 0 ] . Selected = false ;
109+ }
110+ else if ( @event . type . Equals ( "post-test" ) )
111+ {
112+ completetedTests ++ ;
113+ txtTests . Text = ( completetedTests > totalNumberOfTests ? totalNumberOfTests : completetedTests ) + "/" + totalNumberOfTests ;
114+
115+ UpdateProgressBar ( completetedTests ) ;
116+
117+ UpdateTestResult ( @event ) ;
118+ }
119+ else if ( @event . type . Equals ( "post-run" ) )
120+ {
121+ txtStart . Text = @event . run . startTime . ToString ( ) ;
122+ txtEnd . Text = @event . run . endTime . ToString ( ) ;
123+ txtTime . Text = @event . run . executionTime + " s" ;
124+
125+ txtTests . Text = ( completetedTests > totalNumberOfTests ? totalNumberOfTests : completetedTests ) + "/" + totalNumberOfTests ;
126+ txtFailures . Text = @event . run . counter . failure + "" ;
127+ txtErrors . Text = @event . run . counter . error + "" ;
128+ txtDisabled . Text = @event . run . counter . disabled + "" ;
129+
130+ if ( @event . run . counter . failure > 0 || @event . run . counter . error > 0 )
131+ {
132+ progressBar . ForeColor = Color . DarkRed ;
133+ }
134+
135+ if ( ! coverage )
136+ {
137+ txtStatus . Text = "Finished" ;
138+ Running = false ;
139+ }
140+ }
141+ } ) ;
142+ } ) ) ;
143+ }
144+
145+ private void CollectReport ( )
146+ {
147+ Task . Factory . StartNew ( ( ) =>
148+ {
149+ var start = DateTime . Now ;
150+ txtStatus . Text = "Running with Coverage..." ;
151+
152+ string report = testRunner . GetCoverageReport ( ) ;
153+
154+ string filePath = $ "{ Path . GetTempPath ( ) } \\ utPLSQL_Coverage_Report_{ Guid . NewGuid ( ) } .html";
155+ using ( StreamWriter sw = new StreamWriter ( filePath ) )
156+ {
157+ sw . WriteLine ( report ) ;
158+ }
159+
160+ txtStatus . Text = $ "Finished in { ( DateTime . Now - start ) } ";
161+ Running = false ;
162+
163+ System . Diagnostics . Process . Start ( filePath ) ;
164+ } ) ;
165+ }
166+
86167 private string ConvertToVarcharList ( string listValue )
87168 {
88169 if ( String . IsNullOrWhiteSpace ( listValue ) )
@@ -132,90 +213,6 @@ private static string JoinParts(string[] parts)
132213 }
133214 return sb . ToString ( ) ;
134215 }
135-
136- private void CollectReport ( bool coverage )
137- {
138- new Thread ( ( ) =>
139- {
140- if ( coverage )
141- {
142- var start = DateTime . Now ;
143- txtStatus . Text = "Running with Coverage..." ;
144-
145- string report = testRunner . GetCoverageReport ( ) ;
146-
147- string filePath = $ "{ Path . GetTempPath ( ) } \\ utPLSQL_Coverage_Report_{ Guid . NewGuid ( ) } .html";
148- using ( StreamWriter sw = new StreamWriter ( filePath ) )
149- {
150- sw . WriteLine ( report ) ;
151- }
152-
153- txtStatus . Text = $ "Finished in { ( DateTime . Now - start ) } ";
154- Running = false ;
155-
156- System . Diagnostics . Process . Start ( filePath ) ;
157- }
158- } ) . Start ( ) ;
159- }
160-
161- private void CollectResults ( bool coverage )
162- {
163- new Thread ( ( ) =>
164- {
165- var completetedTests = 0 ;
166-
167- testRunner . ConsumeResult ( @event =>
168- {
169- gridResults . BeginInvoke ( ( MethodInvoker ) delegate ( )
170- {
171- if ( @event . type . Equals ( "pre-run" ) )
172- {
173- totalNumberOfTests = @event . totalNumberOfTests ;
174-
175- progressBar . Minimum = 0 ;
176- progressBar . Maximum = totalNumberOfTests * STEPS ;
177- progressBar . Step = STEPS ;
178-
179- CreateTestResults ( @event ) ;
180-
181- gridResults . Rows [ 0 ] . Selected = false ;
182- }
183- else if ( @event . type . Equals ( "post-test" ) )
184- {
185- completetedTests ++ ;
186- txtTests . Text = ( completetedTests > totalNumberOfTests ? totalNumberOfTests : completetedTests ) + "/" + totalNumberOfTests ;
187-
188- UpdateProgressBar ( completetedTests ) ;
189-
190- UpdateTestResult ( @event ) ;
191- }
192- else if ( @event . type . Equals ( "post-run" ) )
193- {
194- txtStart . Text = @event . run . startTime . ToString ( ) ;
195- txtEnd . Text = @event . run . endTime . ToString ( ) ;
196- txtTime . Text = @event . run . executionTime + " s" ;
197-
198- txtTests . Text = ( completetedTests > totalNumberOfTests ? totalNumberOfTests : completetedTests ) + "/" + totalNumberOfTests ;
199- txtFailures . Text = @event . run . counter . failure + "" ;
200- txtErrors . Text = @event . run . counter . error + "" ;
201- txtDisabled . Text = @event . run . counter . disabled + "" ;
202-
203- if ( @event . run . counter . failure > 0 || @event . run . counter . error > 0 )
204- {
205- progressBar . ForeColor = Color . DarkRed ;
206- }
207-
208- if ( ! coverage )
209- {
210- txtStatus . Text = "Finished" ;
211- Running = false ;
212- }
213- }
214- } ) ;
215- } ) ;
216- } ) . Start ( ) ;
217- }
218-
219216 private void UpdateProgressBar ( int completetedTests )
220217 {
221218 int newValue = ( completetedTests * STEPS ) + 1 ;
@@ -502,7 +499,7 @@ private void menuItemRunTests_Click(object sender, EventArgs e)
502499 TestResult testResult = testResults [ rowIndexOnRightClick ] ;
503500
504501 var testResultWindow = new TestRunnerWindow ( testRunner ) ;
505- testResultWindow . RunTests ( RealTimeTestRunner . PROCEDURE , testResult . Owner , testResult . Package , testResult . Procedure , false ) ;
502+ testResultWindow . RunTestsAsync ( RealTimeTestRunner . PROCEDURE , testResult . Owner , testResult . Package , testResult . Procedure , false ) ;
506503 }
507504 }
508505}
0 commit comments