暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

TestSettings.cs 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEngine.Rendering;
  5. namespace UnityEditor.TestTools.TestRunner
  6. {
  7. internal class TestSettings : ITestSettings
  8. {
  9. private readonly TestSetting[] m_Settings =
  10. {
  11. new TestSetting<ScriptingImplementation?>(
  12. settings => settings.scriptingBackend,
  13. () => PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.activeBuildTargetGroup),
  14. implementation => PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.activeBuildTargetGroup, implementation.Value)),
  15. new TestSetting<string>(
  16. settings => settings.Architecture,
  17. () => EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android ? PlayerSettings.Android.targetArchitectures.ToString() : null,
  18. architecture =>
  19. {
  20. if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
  21. {
  22. if (!string.IsNullOrEmpty(architecture))
  23. {
  24. var targetArchitectures = (AndroidArchitecture)Enum.Parse(typeof(AndroidArchitecture), architecture, true);
  25. PlayerSettings.Android.targetArchitectures = targetArchitectures;
  26. }
  27. }
  28. }),
  29. new TestSetting<ApiCompatibilityLevel?>(
  30. settings => settings.apiProfile,
  31. () => PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup),
  32. implementation =>
  33. {
  34. if (Enum.IsDefined(typeof(ApiCompatibilityLevel), implementation.Value))
  35. {
  36. PlayerSettings.SetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup,
  37. implementation.Value);
  38. }
  39. }),
  40. new TestSetting<bool?>(
  41. settings => settings.appleEnableAutomaticSigning,
  42. () => PlayerSettings.iOS.appleEnableAutomaticSigning,
  43. enableAutomaticSigning =>
  44. {
  45. if (enableAutomaticSigning != null)
  46. PlayerSettings.iOS.appleEnableAutomaticSigning = enableAutomaticSigning.Value;
  47. }),
  48. new TestSetting<string>(
  49. settings => settings.appleDeveloperTeamID,
  50. () => PlayerSettings.iOS.appleDeveloperTeamID,
  51. developerTeam =>
  52. {
  53. if (developerTeam != null)
  54. PlayerSettings.iOS.appleDeveloperTeamID = developerTeam;
  55. }),
  56. new TestSetting<ProvisioningProfileType?>(
  57. settings => settings.iOSManualProvisioningProfileType,
  58. () => PlayerSettings.iOS.iOSManualProvisioningProfileType,
  59. profileType =>
  60. {
  61. if (profileType != null)
  62. PlayerSettings.iOS.iOSManualProvisioningProfileType = profileType.Value;
  63. }),
  64. new TestSetting<string>(
  65. settings => settings.iOSManualProvisioningProfileID,
  66. () => PlayerSettings.iOS.iOSManualProvisioningProfileID,
  67. provisioningUUID =>
  68. {
  69. if (provisioningUUID != null)
  70. PlayerSettings.iOS.iOSManualProvisioningProfileID = provisioningUUID;
  71. }),
  72. new TestSetting<ProvisioningProfileType?>(
  73. settings => settings.tvOSManualProvisioningProfileType,
  74. () => PlayerSettings.iOS.tvOSManualProvisioningProfileType,
  75. profileType =>
  76. {
  77. if (profileType != null)
  78. PlayerSettings.iOS.tvOSManualProvisioningProfileType = profileType.Value;
  79. }),
  80. new TestSetting<string>(
  81. settings => settings.tvOSManualProvisioningProfileID,
  82. () => PlayerSettings.iOS.tvOSManualProvisioningProfileID,
  83. provisioningUUID =>
  84. {
  85. if (provisioningUUID != null)
  86. PlayerSettings.iOS.tvOSManualProvisioningProfileID = provisioningUUID;
  87. }),
  88. new TestSetting<bool>(
  89. settings => settings.autoGraphicsAPIs,
  90. () => PlayerSettings.GetUseDefaultGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget),
  91. autoGraphicsAPIs =>
  92. {
  93. PlayerSettings.SetUseDefaultGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget, autoGraphicsAPIs);
  94. }),
  95. new TestSetting<string[]>(
  96. settings => settings.playerGraphicsAPIs,
  97. () => PlayerSettings.GetGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget).Select(api => api.ToString()).ToArray(),
  98. playerGraphicsAPIs =>
  99. {
  100. if (playerGraphicsAPIs != null && playerGraphicsAPIs.Length > 0)
  101. {
  102. var graphicsAPIs = new List<GraphicsDeviceType>();
  103. foreach (var graphicsAPI in playerGraphicsAPIs)
  104. {
  105. if (GraphicsDeviceType.TryParse(graphicsAPI, true, out GraphicsDeviceType playerGraphicsAPI))
  106. graphicsAPIs.Add(playerGraphicsAPI);
  107. }
  108. if (graphicsAPIs.Count > 0)
  109. PlayerSettings.SetGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget, graphicsAPIs.ToArray());
  110. }
  111. }),
  112. };
  113. private bool m_Disposed;
  114. public ScriptingImplementation? scriptingBackend { get; set; }
  115. public string Architecture { get; set; }
  116. public ApiCompatibilityLevel? apiProfile { get; set; }
  117. public bool? appleEnableAutomaticSigning { get; set; }
  118. public string appleDeveloperTeamID { get; set; }
  119. public ProvisioningProfileType? iOSManualProvisioningProfileType { get; set; }
  120. public string iOSManualProvisioningProfileID { get; set; }
  121. public ProvisioningProfileType? tvOSManualProvisioningProfileType { get; set; }
  122. public string tvOSManualProvisioningProfileID { get; set; }
  123. public string[] playerGraphicsAPIs { get; set; }
  124. public bool autoGraphicsAPIs { get; set; }
  125. public void Dispose()
  126. {
  127. if (!m_Disposed)
  128. {
  129. foreach (var testSetting in m_Settings)
  130. {
  131. testSetting.Cleanup();
  132. }
  133. m_Disposed = true;
  134. }
  135. }
  136. public void SetupProjectParameters()
  137. {
  138. foreach (var testSetting in m_Settings)
  139. {
  140. testSetting.Setup(this);
  141. }
  142. }
  143. private abstract class TestSetting
  144. {
  145. public abstract void Setup(TestSettings settings);
  146. public abstract void Cleanup();
  147. }
  148. private class TestSetting<T> : TestSetting
  149. {
  150. private T m_ValueBeforeSetup;
  151. private Func<TestSettings, T> m_GetFromSettings;
  152. private Func<T> m_GetCurrentValue;
  153. private Action<T> m_SetValue;
  154. public TestSetting(Func<TestSettings, T> getFromSettings, Func<T> getCurrentValue, Action<T> setValue)
  155. {
  156. m_GetFromSettings = getFromSettings;
  157. m_GetCurrentValue = getCurrentValue;
  158. m_SetValue = setValue;
  159. }
  160. public override void Setup(TestSettings settings)
  161. {
  162. m_ValueBeforeSetup = m_GetCurrentValue();
  163. var newValue = m_GetFromSettings(settings);
  164. if (newValue != null)
  165. {
  166. m_SetValue(newValue);
  167. }
  168. }
  169. public override void Cleanup()
  170. {
  171. m_SetValue(m_ValueBeforeSetup);
  172. }
  173. }
  174. }
  175. }