104 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using System.IO; | ||
|  | using System.Xml; | ||
|  | using NUnit.Framework.Interfaces; | ||
|  | using UnityEditor.TestTools.TestRunner.Api; | ||
|  | using UnityEngine; | ||
|  | 
 | ||
|  | namespace UnityEditor.TestTools.TestRunner.Api | ||
|  | { | ||
|  |     internal class ResultsWriter | ||
|  |     { | ||
|  |         private const string k_nUnitVersion = "3.5.0.0"; | ||
|  | 
 | ||
|  |         private const string k_TestRunNode = "test-run"; | ||
|  |         private const string k_Id = "id"; | ||
|  |         private const string k_Testcasecount = "testcasecount"; | ||
|  |         private const string k_Result = "result"; | ||
|  |         private const string k_Total = "total"; | ||
|  |         private const string k_Passed = "passed"; | ||
|  |         private const string k_Failed = "failed"; | ||
|  |         private const string k_Inconclusive = "inconclusive"; | ||
|  |         private const string k_Skipped = "skipped"; | ||
|  |         private const string k_Asserts = "asserts"; | ||
|  |         private const string k_EngineVersion = "engine-version"; | ||
|  |         private const string k_ClrVersion = "clr-version"; | ||
|  |         private const string k_StartTime = "start-time"; | ||
|  |         private const string k_EndTime = "end-time"; | ||
|  |         private const string k_Duration = "duration"; | ||
|  | 
 | ||
|  |         private const string k_TimeFormat = "u"; | ||
|  | 
 | ||
|  |         public void WriteResultToFile(ITestResultAdaptor result, string filePath) | ||
|  |         { | ||
|  |             Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Saving results to: {0}", filePath); | ||
|  | 
 | ||
|  |             try | ||
|  |             { | ||
|  |                 if (!Directory.Exists(filePath)) | ||
|  |                 { | ||
|  |                     CreateDirectory(filePath); | ||
|  |                 } | ||
|  | 
 | ||
|  |                 using (var fileStream = File.CreateText(filePath)) | ||
|  |                 { | ||
|  |                     WriteResultToStream(result, fileStream); | ||
|  |                 } | ||
|  |             } | ||
|  |             catch (Exception ex) | ||
|  |             { | ||
|  |                 Debug.LogError("Saving result file failed."); | ||
|  |                 Debug.LogException(ex); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         private void CreateDirectory(string filePath) | ||
|  |         { | ||
|  |             var driectoryPath = Path.GetDirectoryName(filePath); | ||
|  |             if (!String.IsNullOrEmpty(driectoryPath)) | ||
|  |             { | ||
|  |                 Directory.CreateDirectory(driectoryPath); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public void WriteResultToStream(ITestResultAdaptor result, StreamWriter streamWriter, XmlWriterSettings settings = null) | ||
|  |         { | ||
|  |             settings = settings ?? new XmlWriterSettings(); | ||
|  |             settings.Indent = true; | ||
|  |             settings.NewLineOnAttributes = false; | ||
|  | 
 | ||
|  |             using (var xmlWriter = XmlWriter.Create(streamWriter, settings)) | ||
|  |             { | ||
|  |                 WriteResultsToXml(result, xmlWriter); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         private void WriteResultsToXml(ITestResultAdaptor result, XmlWriter xmlWriter) | ||
|  |         { | ||
|  |             // XML format as specified at https://github.com/nunit/docs/wiki/Test-Result-XML-Format | ||
|  | 
 | ||
|  |             var testRunNode = new TNode(k_TestRunNode); | ||
|  | 
 | ||
|  |             testRunNode.AddAttribute(k_Id, "2"); | ||
|  |             testRunNode.AddAttribute(k_Testcasecount, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString()); | ||
|  |             testRunNode.AddAttribute(k_Result, result.ResultState); | ||
|  |             testRunNode.AddAttribute(k_Total, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString()); | ||
|  |             testRunNode.AddAttribute(k_Passed, result.PassCount.ToString()); | ||
|  |             testRunNode.AddAttribute(k_Failed, result.FailCount.ToString()); | ||
|  |             testRunNode.AddAttribute(k_Inconclusive, result.InconclusiveCount.ToString()); | ||
|  |             testRunNode.AddAttribute(k_Skipped, result.SkipCount.ToString()); | ||
|  |             testRunNode.AddAttribute(k_Asserts, result.AssertCount.ToString()); | ||
|  |             testRunNode.AddAttribute(k_EngineVersion, k_nUnitVersion); | ||
|  |             testRunNode.AddAttribute(k_ClrVersion, Environment.Version.ToString()); | ||
|  |             testRunNode.AddAttribute(k_StartTime, result.StartTime.ToString(k_TimeFormat)); | ||
|  |             testRunNode.AddAttribute(k_EndTime, result.EndTime.ToString(k_TimeFormat)); | ||
|  |             testRunNode.AddAttribute(k_Duration, result.Duration.ToString()); | ||
|  | 
 | ||
|  |             var resultNode = result.ToXml(); | ||
|  |             testRunNode.ChildNodes.Add(resultNode); | ||
|  | 
 | ||
|  |             testRunNode.WriteTo(xmlWriter); | ||
|  |         } | ||
|  |     } | ||
|  | } |