< Summary

Class:Tests.SettingsControlsShould
Assembly:SettingsControllersTest
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Settings/SettingsControllers/Tests/SettingsControlsShould.cs
Covered lines:158
Uncovered lines:0
Coverable lines:158
Total lines:382
Line coverage:100% (158 of 158)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SetUp()0%330100%
TearDown()0%330100%
SetupReferences()0%110100%
ChangeAllowVoiceChatCorrectly()0%110100%
ChangeAntialiasingChatCorrectly()0%110100%
ChangeBaseResolutionCorrectly()0%110100%
ChangeBloomCorrectly()0%220100%
ChangeColorGradingCorrectly()0%220100%
ChangeDetailObjectCullingCorrectly()0%110100%
ChangeDetailObjectCullingSizeCorrectly()0%110100%
ChangeDrawDistanceCorrectly()0%110100%
ChangeFPSLimitCorrectly()0%110100%
ChangeMouseSensivityCorrectly()0%110100%
ChangeMuteSoundCorrectly()0%330100%
ChangeRenderingScaleCorrectly()0%110100%
ChangeShadowsCorrectly()0%110100%
ChangeShadowDistanceCorrectly()0%110100%
ChangeShadowresolutionCorrectly()0%110100%
ChangeSoftShadowsCorrectly()0%110100%
ChangeVoiceChatVolumeCorrectly()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Settings/SettingsControllers/Tests/SettingsControlsShould.cs

#LineLine coverage
 1using Cinemachine;
 2using DCL.SettingsCommon;
 3using DCL.SettingsController;
 4using DCL.SettingsControls;
 5using NUnit.Framework;
 6using System.Collections;
 7using System.Reflection;
 8using UnityEditor.SceneManagement;
 9using UnityEngine;
 10using UnityEngine.Rendering;
 11using UnityEngine.Rendering.Universal;
 12using UnityEngine.SceneManagement;
 13using UnityEngine.TestTools;
 14
 15namespace Tests
 16{
 17    public class SettingsControlsShould
 18    {
 19        private const string TEST_SCENE_PATH = "Assets/Scripts/MainScripts/DCL/Controllers/Settings/SettingsControllers/
 20        private const string TEST_SCENE_NAME = "SettingsTestScene";
 21
 22        private SettingsControlController settingController;
 23
 24        private CinemachineFreeLook freeLookCamera;
 25        private CinemachineVirtualCamera firstPersonCamera;
 26        private CinemachinePOV povCamera;
 27        private Light environmentLight;
 28        private Volume postProcessVolume;
 29        private UniversalRenderPipelineAsset urpAsset;
 30        private FieldInfo lwrpaShadowField = null;
 31        private FieldInfo lwrpaShadowResolutionField = null;
 32        private FieldInfo lwrpaSoftShadowField = null;
 33
 34        [UnitySetUp]
 35        public IEnumerator SetUp()
 36        {
 1737            yield return EditorSceneManager.LoadSceneAsyncInPlayMode($"{TEST_SCENE_PATH}/{TEST_SCENE_NAME}.unity", new L
 38
 1739            SetupReferences();
 1740        }
 41
 42        [UnityTearDown]
 43        public IEnumerator TearDown()
 44        {
 1745            ScriptableObject.Destroy(settingController);
 46
 1747            yield return EditorSceneManager.UnloadSceneAsync(TEST_SCENE_NAME);
 1748        }
 49
 50        private void SetupReferences()
 51        {
 1752            urpAsset = GraphicsSettings.renderPipelineAsset as UniversalRenderPipelineAsset;
 1753            Assert.IsNotNull(urpAsset, "urpAsset is null!");
 54
 1755            lwrpaShadowField = urpAsset.GetType().GetField("m_MainLightShadowsSupported", BindingFlags.NonPublic | Bindi
 1756            Assert.IsNotNull(lwrpaShadowField, "lwrpaShadowField is null!");
 57
 1758            lwrpaShadowResolutionField = urpAsset.GetType().GetField("m_MainLightShadowmapResolution", BindingFlags.NonP
 1759            Assert.IsNotNull(lwrpaShadowResolutionField, "lwrpaShadowResolutionField is null!");
 60
 1761            lwrpaSoftShadowField = urpAsset.GetType().GetField("m_SoftShadowsSupported", BindingFlags.NonPublic | Bindin
 1762            Assert.IsNotNull(lwrpaSoftShadowField, "lwrpaSoftShadowField is null!");
 63
 1764            GeneralSettingsReferences generalSettingsReferences = GameObject.FindObjectOfType<GeneralSettingsReferences>
 1765            QualitySettingsReferences qualitySettingsReferences = GameObject.FindObjectOfType<QualitySettingsReferences>
 66
 1767            Assert.IsNotNull(generalSettingsReferences, "GeneralSettingsReferences not found in scene");
 1768            Assert.IsNotNull(qualitySettingsReferences, "QualitySettingsReferences not found in scene");
 69
 1770            freeLookCamera = generalSettingsReferences.thirdPersonCamera;
 1771            Assert.IsNotNull(freeLookCamera, "GeneralSettingsController: thirdPersonCamera reference missing");
 72
 1773            CinemachineVirtualCamera virtualCamera = generalSettingsReferences.firstPersonCamera;
 1774            Assert.IsNotNull(virtualCamera, "GeneralSettingsController: firstPersonCamera reference missing");
 1775            povCamera = virtualCamera.GetCinemachineComponent<CinemachinePOV>();
 1776            Assert.IsNotNull(povCamera, "GeneralSettingsController: firstPersonCamera doesn't have CinemachinePOV compon
 77
 1778            environmentLight = qualitySettingsReferences.environmentLight;
 1779            Assert.IsNotNull(environmentLight, "QualitySettingsController: environmentLight reference missing");
 80
 1781            postProcessVolume = qualitySettingsReferences.postProcessVolume;
 1782            Assert.IsNotNull(postProcessVolume, "QualitySettingsController: postProcessVolume reference missing");
 83
 1784            firstPersonCamera = qualitySettingsReferences.firstPersonCamera;
 1785            Assert.IsNotNull(firstPersonCamera, "QualitySettingsController: firstPersonCamera reference missing");
 1786            Assert.IsNotNull(qualitySettingsReferences.thirdPersonCamera, "QualitySettingsController: thirdPersonCamera 
 1787        }
 88
 89        [Test]
 90        public void ChangeAllowVoiceChatCorrectly()
 91        {
 92            // Arrange
 193            settingController = ScriptableObject.CreateInstance<AllowVoiceChatControlController>();
 194            settingController.Initialize();
 95
 96            // Act
 197            int newValue = (int)DCL.SettingsData.GeneralSettings.VoiceChatAllow.FRIENDS_ONLY;
 198            settingController.UpdateSetting(newValue);
 99
 100            // Assert
 1101            Assert.AreEqual(newValue, settingController.GetStoredValue(), "voiceChatAllow stored value mismatch");
 1102        }
 103
 104        [Test]
 105        public void ChangeAntialiasingChatCorrectly()
 106        {
 107            // Arrange
 1108            settingController = ScriptableObject.CreateInstance<AntiAliasingControlController>();
 1109            settingController.Initialize();
 110
 111            // Act
 1112            float newValue = (float)MsaaQuality._8x;
 1113            settingController.UpdateSetting(newValue);
 114
 115            // Assert
 1116            int antiAliasingValue = 1 << (int)newValue;
 1117            Assert.AreEqual((antiAliasingValue >> 2) + 1, settingController.GetStoredValue(), "antiAliasing stored value
 1118            Assert.AreEqual(antiAliasingValue, urpAsset.msaaSampleCount, "antiAliasing mismatch");
 1119        }
 120
 121        [Test]
 122        public void ChangeBaseResolutionCorrectly()
 123        {
 124            // Arrange
 1125            settingController = ScriptableObject.CreateInstance<BaseResolutionControlController>();
 1126            settingController.Initialize();
 127
 128            // Act
 1129            DCL.SettingsData.QualitySettings.BaseResolution newValue = DCL.SettingsData.QualitySettings.BaseResolution.B
 1130            settingController.UpdateSetting(newValue);
 131
 132            // Assert
 1133            Assert.AreEqual((int)newValue, settingController.GetStoredValue(), "baseResolution stored value mismatch");
 1134        }
 135
 136        [Test]
 137        public void ChangeBloomCorrectly()
 138        {
 139            // Arrange
 1140            settingController = ScriptableObject.CreateInstance<BloomControlController>();
 1141            settingController.Initialize();
 142
 143            // Act
 1144            bool newValue = true;
 1145            settingController.UpdateSetting(newValue);
 146
 147            // Assert
 1148            Assert.AreEqual(newValue, settingController.GetStoredValue(), "bloom stored value mismatch");
 1149            if (postProcessVolume.profile.TryGet<Bloom>(out Bloom bloom))
 150            {
 1151                Assert.AreEqual(newValue, bloom.active, "bloom mismatch");
 152            }
 1153        }
 154
 155        [Test]
 156        public void ChangeColorGradingCorrectly()
 157        {
 158            // Arrange
 1159            settingController = ScriptableObject.CreateInstance<ColorGradingControlController>();
 1160            settingController.Initialize();
 161
 162            // Act
 1163            bool newValue = true;
 1164            settingController.UpdateSetting(newValue);
 165
 166            // Assert
 1167            Assert.AreEqual(newValue, settingController.GetStoredValue(), "colorGrading stored value mismatch");
 168            Tonemapping toneMapping;
 1169            if (QualitySettingsReferences.i.postProcessVolume.profile.TryGet<Tonemapping>(out toneMapping))
 170            {
 1171                Assert.AreEqual(newValue, toneMapping.active, "bloom mismatch");
 172            }
 1173        }
 174
 175        [Test]
 176        public void ChangeDetailObjectCullingCorrectly()
 177        {
 178            // Arrange
 1179            settingController = ScriptableObject.CreateInstance<DetailObjectCullingControlController>();
 1180            settingController.Initialize();
 181
 182            // Act
 1183            bool newValue = true;
 1184            settingController.UpdateSetting(newValue);
 185
 186            // Assert
 1187            Assert.AreEqual(newValue, settingController.GetStoredValue(), "enableDetailObjectCulling stored value mismat
 1188            Assert.AreNotEqual(newValue, CommonSettingsScriptableObjects.detailObjectCullingDisabled.Get());
 1189        }
 190
 191        [Test]
 192        public void ChangeDetailObjectCullingSizeCorrectly()
 193        {
 194            // Arrange
 1195            settingController = ScriptableObject.CreateInstance<DetailObjectCullingSizeControlController>();
 1196            settingController.Initialize();
 197
 198            // Act
 1199            float newValue = 20f;
 1200            settingController.UpdateSetting(newValue);
 201
 202            // Assert
 1203            Assert.AreEqual(newValue, settingController.GetStoredValue(), "detailObjectCullingThreshold stored value mis
 1204        }
 205
 206        [Test]
 207        public void ChangeDrawDistanceCorrectly()
 208        {
 209            // Arrange
 1210            settingController = ScriptableObject.CreateInstance<DrawDistanceControlController>();
 1211            settingController.Initialize();
 212
 213            // Act
 1214            float newValue = 50f;
 1215            settingController.UpdateSetting(newValue);
 216
 217            // Assert
 1218            Assert.AreEqual(newValue, settingController.GetStoredValue(), "cameraDrawDistance stored value mismatch");
 1219            Assert.AreEqual(freeLookCamera.m_Lens.FarClipPlane, newValue, "3rd person camera FarClipPlane value mismatch
 1220            Assert.AreEqual(firstPersonCamera.m_Lens.FarClipPlane, newValue, "1st person camera FarClipPlane value misma
 1221            Assert.AreEqual(RenderSettings.fogEndDistance, newValue, "fogEndDistance value mismatch");
 1222            Assert.AreEqual(RenderSettings.fogStartDistance, newValue * 0.8f, "fogStartDistance value mismatch");
 1223        }
 224
 225        [Test]
 226        public void ChangeFPSLimitCorrectly()
 227        {
 228            // Arrange
 1229            settingController = ScriptableObject.CreateInstance<FPSLimitControlController>();
 1230            settingController.Initialize();
 231
 232            // Act
 1233            bool newValue = true;
 1234            settingController.UpdateSetting(newValue);
 235
 236            // Assert
 1237            Assert.AreEqual(newValue, settingController.GetStoredValue(), "fpsCap stored value mismatch");
 1238        }
 239
 240        [Test]
 241        public void ChangeMouseSensivityCorrectly()
 242        {
 243            // Arrange
 1244            settingController = ScriptableObject.CreateInstance<MouseSensivityControlController>();
 1245            settingController.Initialize();
 246
 247            // Act
 1248            float newValue = 80f;
 1249            settingController.UpdateSetting(newValue);
 250
 251            // Assert
 1252            Assert.AreEqual(newValue, settingController.GetStoredValue(), "mouseSensitivity stored value mismatch");
 1253            var povSpeed = Mathf.Lerp(MouseSensivityControlController.FIRST_PERSON_MIN_SPEED, MouseSensivityControlContr
 1254            UnityEngine.Assertions.Assert.AreApproximatelyEqual(povSpeed, povCamera.m_HorizontalAxis.m_MaxSpeed, "povCam
 1255            UnityEngine.Assertions.Assert.AreApproximatelyEqual(povSpeed, povCamera.m_VerticalAxis.m_MaxSpeed, "povCamer
 1256            UnityEngine.Assertions.Assert.AreApproximatelyEqual(
 257                Mathf.Lerp(MouseSensivityControlController.THIRD_PERSON_X_MIN_SPEED, MouseSensivityControlController.THI
 258                freeLookCamera.m_XAxis.m_MaxSpeed,
 259                "freeLookCamera.m_XAxis.m_MaxSpeed value mismatch");
 1260            UnityEngine.Assertions.Assert.AreApproximatelyEqual(
 261                Mathf.Lerp(MouseSensivityControlController.THIRD_PERSON_Y_MIN_SPEED, MouseSensivityControlController.THI
 262                freeLookCamera.m_YAxis.m_MaxSpeed,
 263                "freeLookCamera.m_YAxis.m_MaxSpeed value mismatch");
 1264        }
 265
 266        [Test]
 267        public void ChangeMuteSoundCorrectly()
 268        {
 269            // Arrange
 1270            settingController = ScriptableObject.CreateInstance<MuteSoundControlController>();
 1271            settingController.Initialize();
 272
 273            // Act
 1274            bool newValue = true;
 1275            settingController.UpdateSetting(newValue);
 276
 277            // Assert
 1278            Assert.AreEqual(newValue, settingController.GetStoredValue(), "muteSound stored value mismatch");
 1279            Assert.AreEqual(newValue ? 1f : 0f, AudioListener.volume, "sfxVolume value mismatch");
 1280        }
 281
 282        [Test]
 283        public void ChangeRenderingScaleCorrectly()
 284        {
 285            // Arrange
 1286            settingController = ScriptableObject.CreateInstance<RenderingScaleControlController>();
 1287            settingController.Initialize();
 288
 289            // Act
 1290            float newValue = 0.5f;
 1291            settingController.UpdateSetting(newValue);
 292
 293            // Assert
 1294            Assert.AreEqual(newValue, settingController.GetStoredValue(), "renderScale stored value mismatch");
 1295            Assert.AreEqual(newValue, urpAsset.renderScale, "renderScale value mismatch");
 1296        }
 297
 298        [Test]
 299        public void ChangeShadowsCorrectly()
 300        {
 301            // Arrange
 1302            settingController = ScriptableObject.CreateInstance<ShadowControlController>();
 1303            settingController.Initialize();
 304
 305            // Act
 1306            bool newValue = true;
 1307            settingController.UpdateSetting(newValue);
 308
 309            // Assert
 1310            Assert.AreEqual(newValue, settingController.GetStoredValue(), "shadows stored value mismatch");
 1311            Assert.AreEqual(newValue, lwrpaShadowField.GetValue(urpAsset), "lwrpaShadowField value mismatch");
 1312            Assert.AreNotEqual(newValue, CommonSettingsScriptableObjects.shadowsDisabled.Get());
 1313        }
 314
 315        [Test]
 316        public void ChangeShadowDistanceCorrectly()
 317        {
 318            // Arrange
 1319            settingController = ScriptableObject.CreateInstance<ShadowDistanceControlController>();
 1320            settingController.Initialize();
 321
 322            // Act
 1323            float newValue = 50f;
 1324            settingController.UpdateSetting(newValue);
 325
 326            // Assert
 1327            Assert.AreEqual(newValue, settingController.GetStoredValue(), "shadowDistance stored value mismatch");
 1328            Assert.AreEqual(newValue, urpAsset.shadowDistance, "shadowDistance value mismatch");
 1329        }
 330
 331        [Test]
 332        public void ChangeShadowresolutionCorrectly()
 333        {
 334            // Arrange
 1335            settingController = ScriptableObject.CreateInstance<ShadowResolutionControlController>();
 1336            settingController.Initialize();
 337
 338            // Act
 1339            int newValue = 4;
 1340            settingController.UpdateSetting(newValue);
 341
 342            // Assert
 1343            UnityEngine.Rendering.Universal.ShadowResolution newValueFormatted = (UnityEngine.Rendering.Universal.Shadow
 1344            Assert.AreEqual(
 345                (int)Mathf.Log((int)newValueFormatted, 2) - 8,
 346                settingController.GetStoredValue(),
 347                "shadowResolution stored value mismatch");
 1348            Assert.AreEqual(newValueFormatted, lwrpaShadowResolutionField.GetValue(urpAsset), "lwrpaShadowResolutionFiel
 1349        }
 350
 351        [Test]
 352        public void ChangeSoftShadowsCorrectly()
 353        {
 354            // Arrange
 1355            settingController = ScriptableObject.CreateInstance<SoftShadowsControlController>();
 1356            settingController.Initialize();
 357
 358            // Act
 1359            bool newValue = true;
 1360            settingController.UpdateSetting(newValue);
 361
 362            // Assert
 1363            Assert.AreEqual(newValue, settingController.GetStoredValue(), "softShadows stored value mismatch");
 1364            Assert.AreEqual(newValue, lwrpaSoftShadowField.GetValue(urpAsset), "lwrpaShadowResolutionField value mismatc
 1365        }
 366
 367        [Test]
 368        public void ChangeVoiceChatVolumeCorrectly()
 369        {
 370            // Arrange
 1371            settingController = ScriptableObject.CreateInstance<VoiceChatVolumeControlController>();
 1372            settingController.Initialize();
 373
 374            // Act
 1375            float newValue = 90f;
 1376            settingController.UpdateSetting(newValue);
 377
 378            // Assert
 1379            Assert.AreEqual(newValue, settingController.GetStoredValue(), "voiceChatVolume stored value mismatch");
 1380        }
 381    }
 382}