@@ -21,6 +21,7 @@ public class TestRunnerService : ITestRunnerService, ICallbacks
2121 private readonly TestRunnerApi _testRunnerApi ;
2222 private TaskCompletionSource < JObject > _tcs ;
2323 private bool _returnOnlyFailures ;
24+ private bool _returnWithLogs ;
2425 private List < ITestResultAdaptor > _results ;
2526
2627 /// <summary>
@@ -77,13 +78,15 @@ public async Task<List<ITestAdaptor>> GetAllTestsAsync(string testModeFilter = "
7778 /// </summary>
7879 /// <param name="testMode">The test mode to run (EditMode or PlayMode).</param>
7980 /// <param name="returnOnlyFailures">If true, only failed test results are included in the output.</param>
81+ /// <param name="returnWithLogs">If true, all logs are included in the output.</param>
8082 /// <param name="testFilter">A filter string to select specific tests to run.</param>
8183 /// <returns>Task that resolves with test results when tests are complete</returns>
82- public async Task < JObject > ExecuteTestsAsync ( TestMode testMode , bool returnOnlyFailures , string testFilter = "" )
84+ public async Task < JObject > ExecuteTestsAsync ( TestMode testMode , bool returnOnlyFailures , bool returnWithLogs , string testFilter = "" )
8385 {
8486 _tcs = new TaskCompletionSource < JObject > ( ) ;
8587 _results = new List < ITestResultAdaptor > ( ) ;
8688 _returnOnlyFailures = returnOnlyFailures ;
89+ _returnWithLogs = returnWithLogs ;
8790 var filter = new Filter { testMode = testMode } ;
8891
8992 if ( ! string . IsNullOrEmpty ( testFilter ) )
@@ -191,30 +194,30 @@ private async Task<JObject> WaitForCompletionAsync(int timeoutSeconds)
191194
192195 private JObject BuildResultJson ( List < ITestResultAdaptor > results , ITestResultAdaptor result )
193196 {
194- int pass = results . Count ( r => r . ResultState == "Passed" ) ;
195- int fail = results . Count ( r => r . ResultState == "Failed" ) ;
196- int skip = results . Count ( r => r . ResultState == "Skipped" ) ;
197-
198197 var arr = new JArray ( results
198+ . Where ( r => ! r . HasChildren )
199199 . Where ( r => ! _returnOnlyFailures || r . ResultState == "Failed" )
200200 . Select ( r => new JObject {
201201 [ "name" ] = r . Name ,
202202 [ "fullName" ] = r . FullName ,
203203 [ "state" ] = r . ResultState ,
204204 [ "message" ] = r . Message ,
205- [ "duration" ] = r . Duration
205+ [ "duration" ] = r . Duration ,
206+ [ "logs" ] = _returnWithLogs ? r . Output : null ,
207+ [ "stackTrace" ] = r . StackTrace
206208 } ) ) ;
207209
210+ int testCount = result . PassCount + result . SkipCount + result . FailCount ;
208211 return new JObject {
209212 [ "success" ] = true ,
210213 [ "type" ] = "text" ,
211- [ "message" ] = $ "{ result . Test . Name } test run completed: { pass } /{ results . Count } passed - { fail } /{ results . Count } failed - { skip } /{ results . Count } skipped",
214+ [ "message" ] = $ "{ result . Test . Name } test run completed: { result . PassCount } /{ testCount } passed - { result . FailCount } /{ testCount } failed - { result . SkipCount } /{ testCount } skipped",
212215 [ "resultState" ] = result . ResultState ,
213216 [ "durationSeconds" ] = result . Duration ,
214- [ "testCount" ] = results . Count ,
215- [ "passCount" ] = pass ,
216- [ "failCount" ] = fail ,
217- [ "skipCount" ] = skip ,
217+ [ "testCount" ] = testCount ,
218+ [ "passCount" ] = result . PassCount ,
219+ [ "failCount" ] = result . FailCount ,
220+ [ "skipCount" ] = result . SkipCount ,
218221 [ "results" ] = arr
219222 } ;
220223 }
0 commit comments