123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Xml;
- using UnityEditor.TestTools.TestRunner.Api;
- using UnityEditor.TestTools.TestRunner.GUI;
-
- namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol
- {
- internal class TestRunnerApiMapper : ITestRunnerApiMapper
- {
- internal IGuiHelper guiHelper = new GuiHelper(new MonoCecilHelper(), new AssetsDatabaseHelper());
- private readonly string _projectRepoPath;
-
- public TestRunnerApiMapper(string projectRepoPath)
- {
- _projectRepoPath = projectRepoPath;
- }
-
- public TestPlanMessage MapTestToTestPlanMessage(ITestAdaptor testsToRun)
- {
- var testsNames = testsToRun != null ? FlattenTestNames(testsToRun) : new List<string>();
-
- var msg = new TestPlanMessage
- {
- tests = testsNames
- };
-
- return msg;
- }
-
- public TestStartedMessage MapTestToTestStartedMessage(ITestAdaptor test)
- {
- return new TestStartedMessage
- {
- name = test.FullName
- };
- }
-
- public TestFinishedMessage TestResultToTestFinishedMessage(ITestResultAdaptor result)
- {
- string filePathString = default;
- int lineNumber = default;
- if (result.Test.Method != null && result.Test.TypeInfo != null)
- {
- var method = result.Test.Method.MethodInfo;
- var type = result.Test.TypeInfo.Type;
- var fileOpenInfo = guiHelper.GetFileOpenInfo(type, method);
- filePathString = !string.IsNullOrEmpty(_projectRepoPath) ? Path.Combine(_projectRepoPath, fileOpenInfo.FilePath) : fileOpenInfo.FilePath;
- lineNumber = fileOpenInfo.LineNumber;
- }
-
- var iteration = 0;
- if(result is TestResultAdaptor)
- {
- var adaptor = ((TestResultAdaptor)result);
- iteration = adaptor.RepeatIteration == 0 ? adaptor.RetryIteration : adaptor.RepeatIteration;
- }
- return new TestFinishedMessage
- {
- name = result.Test.FullName,
- duration = Convert.ToUInt64(result.Duration * 1000),
- durationMicroseconds = Convert.ToUInt64(result.Duration * 1000000),
- message = result.Message,
- state = GetTestStateFromResult(result),
- stackTrace = result.StackTrace,
- fileName = filePathString,
- lineNumber = lineNumber,
- iteration = iteration
- };
- }
-
- public string GetRunStateFromResultNunitXml(ITestResultAdaptor result)
- {
- var doc = new XmlDocument();
- doc.LoadXml(result.ToXml().OuterXml);
- return doc.FirstChild.Attributes["runstate"].Value;
- }
-
- public TestState GetTestStateFromResult(ITestResultAdaptor result)
- {
- var state = TestState.Failure;
-
- if (result.TestStatus == TestStatus.Passed)
- {
- state = TestState.Success;
- }
- else if (result.TestStatus == TestStatus.Skipped)
- {
- state = TestState.Skipped;
-
- if (result.ResultState.ToLowerInvariant().EndsWith("ignored"))
- {
- state = TestState.Ignored;
- }
- }
- else
- {
- if (result.ResultState.ToLowerInvariant().Equals("inconclusive"))
- {
- state = TestState.Inconclusive;
- }
-
- if (result.ResultState.ToLowerInvariant().EndsWith("cancelled") ||
- result.ResultState.ToLowerInvariant().EndsWith("error"))
- {
- state = TestState.Error;
- }
- }
-
- return state;
- }
-
- public List<string> FlattenTestNames(ITestAdaptor test)
- {
- var results = new List<string>();
-
- if (!test.IsSuite)
- results.Add(test.FullName);
-
- if (test.Children != null && test.Children.Any())
- foreach (var child in test.Children)
- results.AddRange(FlattenTestNames(child));
-
- return results;
- }
- }
- }
|