TestAdaptorFactory.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using NUnit.Framework.Interfaces;
  4. using UnityEngine.TestRunner.NUnitExtensions;
  5. using UnityEngine.TestRunner.TestLaunchers;
  6. namespace UnityEditor.TestTools.TestRunner.Api
  7. {
  8. internal class TestAdaptorFactory : ITestAdaptorFactory
  9. {
  10. private Dictionary<string, TestAdaptor> m_TestAdaptorCache = new Dictionary<string, TestAdaptor>();
  11. private Dictionary<string, TestResultAdaptor> m_TestResultAdaptorCache = new Dictionary<string, TestResultAdaptor>();
  12. public ITestAdaptor Create(ITest test)
  13. {
  14. var uniqueName = test.GetUniqueName();
  15. if (m_TestAdaptorCache.ContainsKey(uniqueName))
  16. {
  17. return m_TestAdaptorCache[uniqueName];
  18. }
  19. var adaptor = new TestAdaptor(test, test.Tests.Select(Create).ToArray());
  20. foreach (var child in adaptor.Children)
  21. {
  22. (child as TestAdaptor).SetParent(adaptor);
  23. }
  24. m_TestAdaptorCache[uniqueName] = adaptor;
  25. return adaptor;
  26. }
  27. public ITestAdaptor Create(RemoteTestData testData)
  28. {
  29. return new TestAdaptor(testData);
  30. }
  31. public ITestResultAdaptor Create(ITestResult testResult)
  32. {
  33. var uniqueName = testResult.Test.GetUniqueName();
  34. if (m_TestResultAdaptorCache.ContainsKey(uniqueName))
  35. {
  36. return m_TestResultAdaptorCache[uniqueName];
  37. }
  38. var adaptor = new TestResultAdaptor(testResult, Create(testResult.Test), testResult.Children.Select(Create).ToArray());
  39. m_TestResultAdaptorCache[uniqueName] = adaptor;
  40. return adaptor;
  41. }
  42. public ITestResultAdaptor Create(RemoteTestResultData testResult, RemoteTestResultDataWithTestData allData)
  43. {
  44. return new TestResultAdaptor(testResult, allData);
  45. }
  46. public ITestAdaptor BuildTree(RemoteTestResultDataWithTestData data)
  47. {
  48. var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList();
  49. foreach (var test in tests)
  50. {
  51. test.ApplyChildren(tests);
  52. }
  53. return tests.First();
  54. }
  55. public IEnumerator<ITestAdaptor> BuildTreeAsync(RemoteTestResultDataWithTestData data)
  56. {
  57. var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList();
  58. for (var index = 0; index < tests.Count; index++)
  59. {
  60. var test = tests[index];
  61. test.ApplyChildren(tests);
  62. if (index % 100 == 0)
  63. {
  64. yield return null;
  65. }
  66. }
  67. yield return tests.First();
  68. }
  69. public void ClearResultsCache()
  70. {
  71. m_TestResultAdaptorCache.Clear();
  72. }
  73. public void ClearTestsCache()
  74. {
  75. m_TestAdaptorCache.Clear();
  76. }
  77. }
  78. }