TestSettings.cs 6.5 KB

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