]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add test to load all config presets (#20705)
authorDrSmugleaf <DrSmugleaf@users.noreply.github.com>
Sat, 7 Oct 2023 02:31:08 +0000 (19:31 -0700)
committerGitHub <noreply@github.com>
Sat, 7 Oct 2023 02:31:08 +0000 (19:31 -0700)
Content.IntegrationTests/Tests/ConfigPresetTests.cs [new file with mode: 0644]
Content.Server/AssemblyInfo.cs
Content.Server/Entry/EntryPoint.cs

diff --git a/Content.IntegrationTests/Tests/ConfigPresetTests.cs b/Content.IntegrationTests/Tests/ConfigPresetTests.cs
new file mode 100644 (file)
index 0000000..9defdce
--- /dev/null
@@ -0,0 +1,71 @@
+using System.Collections.Generic;
+using System.IO;
+using Content.Server.Entry;
+using Robust.Shared.Configuration;
+using Robust.Shared.ContentPack;
+
+namespace Content.IntegrationTests.Tests;
+
+[TestFixture]
+public sealed class ConfigPresetTests
+{
+    [Test]
+    public async Task TestLoadAll()
+    {
+        var pair = await PoolManager.GetServerClient();
+        var server = pair.Server;
+
+        var resources = server.ResolveDependency<IResourceManager>();
+        var config = server.ResolveDependency<IConfigurationManager>();
+
+        await server.WaitPost(() =>
+        {
+            var originalCVars = new List<(string, object)>();
+            foreach (var cvar in config.GetRegisteredCVars())
+            {
+                var value = config.GetCVar<object>(cvar);
+                originalCVars.Add((cvar, value));
+            }
+
+            var originalCvarsStream = new MemoryStream();
+            config.SaveToTomlStream(originalCvarsStream, config.GetRegisteredCVars());
+            originalCvarsStream.Position = 0;
+
+            var presets = resources.ContentFindFiles(EntryPoint.ConfigPresetsDir);
+            Assert.Multiple(() =>
+            {
+                foreach (var preset in presets)
+                {
+                    var stream = resources.ContentFileRead(preset);
+                    Assert.DoesNotThrow(() => config.LoadDefaultsFromTomlStream(stream));
+                }
+            });
+
+            config.LoadDefaultsFromTomlStream(originalCvarsStream);
+
+            foreach (var originalCVar in originalCVars)
+            {
+                var (name, originalValue) = originalCVar;
+                var newValue = config.GetCVar<object>(name);
+                var originalValueType = originalValue.GetType();
+                var newValueType = newValue.GetType();
+                if (originalValueType.IsEnum || newValueType.IsEnum)
+                {
+                    originalValue = Enum.ToObject(originalValueType, originalValue);
+                    newValue = Enum.ToObject(originalValueType, newValue);
+                }
+
+                if (originalValueType == typeof(float) || newValueType == typeof(float))
+                {
+                    originalValue = Convert.ToSingle(originalValue);
+                    newValue = Convert.ToSingle(newValue);
+                }
+
+                if (!Equals(newValue, originalValue))
+                    Assert.Fail($"CVar {name} was not reset to its original value.");
+            }
+        });
+
+        await pair.CleanReturnAsync();
+    }
+}
index 54b2cd50ace24a556285a484a5d9ee9dcf98f605..513ab37ab23640399fe1d8cae3a04e979d8e3f08 100644 (file)
@@ -1,3 +1,4 @@
 using System.Runtime.CompilerServices;
 
 [assembly: InternalsVisibleTo("Content.Tests")]
+[assembly: InternalsVisibleTo("Content.IntegrationTests")]
index 41b6963332f6d3d45136eaaaff4b71426ead6974..d71225116caf189185d7c78aac0180d28de23057 100644 (file)
@@ -21,20 +21,20 @@ using Content.Server.ServerUpdates;
 using Content.Server.Voting.Managers;
 using Content.Shared.CCVar;
 using Content.Shared.Kitchen;
+using Content.Shared.Localizations;
 using Robust.Server;
-using Robust.Shared.Configuration;
 using Robust.Server.ServerStatus;
+using Robust.Shared.Configuration;
 using Robust.Shared.ContentPack;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Timing;
 using Robust.Shared.Utility;
-using Content.Shared.Localizations;
 
 namespace Content.Server.Entry
 {
     public sealed class EntryPoint : GameServer
     {
-        private const string ConfigPresetsDir = "/ConfigPresets/";
+        internal const string ConfigPresetsDir = "/ConfigPresets/";
         private const string ConfigPresetsDirBuild = $"{ConfigPresetsDir}Build/";
 
         private EuiManager _euiManager = default!;