Initial commit: AIGame Unity client with URP, HybridCLR, YooAsset and tooling.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+108
@@ -0,0 +1,108 @@
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Unity.Pipeline.Commands;
|
||||
using Unity.Pipeline.Editor;
|
||||
using Unity.Pipeline.Editor.Commands.ProjectSettings;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.Pipeline.Tests.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// Wiring tests for the per-group project-settings commands (CLI-202, step 3). These are
|
||||
/// deliberately non-mutating: they verify discovery, nested-object schema exposure, the read path,
|
||||
/// and the confirm/dry-run gate — without committing a change to the test project's real settings.
|
||||
/// End-to-end mutate-and-read-back coverage per group belongs to the dedicated test step.
|
||||
/// </summary>
|
||||
class ProjectSettingsGroupCommandsTests
|
||||
{
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
CommandRegistry.SetDiscovery(new TypeCacheCommandDiscovery());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AllSettingsGroups_ExposeGetAndSetCommands()
|
||||
{
|
||||
var names = CommandRegistry.DiscoverCommands().Select(c => c.Name).ToList();
|
||||
|
||||
foreach (var group in new[] { "player", "quality", "graphics", "physics", "time", "input", "audio" })
|
||||
{
|
||||
Assert.Contains($"get_{group}_settings", names, $"missing get for {group}");
|
||||
Assert.Contains($"set_{group}_settings", names, $"missing set for {group}");
|
||||
}
|
||||
|
||||
// Tags & layers uses its own (non "_settings") naming.
|
||||
Assert.Contains("get_tags_layers", names);
|
||||
Assert.Contains("set_tags_layers", names);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetPlayerSettings_ExposesNestedObjectSchema_WithGateArgs()
|
||||
{
|
||||
var command = CommandRegistry.DiscoverCommands().First(c => c.Name == "set_player_settings");
|
||||
var schema = JObject.Parse(JsonSchemaGenerator.GenerateCommandSchema(command));
|
||||
var properties = (JObject)schema["properties"];
|
||||
|
||||
// The structured 'settings' parameter is a real nested object (from CAT-2508)...
|
||||
var settings = (JObject)properties["settings"];
|
||||
Assert.AreEqual("object", settings["type"]?.ToString());
|
||||
|
||||
var settingsProps = (JObject)settings["properties"];
|
||||
Assert.AreEqual("string", settingsProps["companyName"]?["type"]?.ToString());
|
||||
|
||||
// ...including the enum-typed scripting backend rendered with its allowed values.
|
||||
var backend = settingsProps["scriptingBackend"];
|
||||
Assert.AreEqual("string", backend?["type"]?.ToString());
|
||||
Assert.IsNotNull(backend?["enum"], "scriptingBackend should expose its enum values");
|
||||
|
||||
// ...and the shared confirm / dry_run gate args.
|
||||
Assert.AreEqual("boolean", properties["confirm"]?["type"]?.ToString());
|
||||
Assert.AreEqual("boolean", properties["dry_run"]?["type"]?.ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetTimeSettings_ReadsCurrentValues()
|
||||
{
|
||||
var response = TimeSettingsCommands.Get();
|
||||
|
||||
Assert.IsTrue(response.Success);
|
||||
Assert.AreEqual("time", response.Group);
|
||||
Assert.IsFalse(response.Applied);
|
||||
Assert.IsTrue(response.Values.ContainsKey("fixedDeltaTime"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetTimeSettings_DryRun_PreviewsWithoutMutating()
|
||||
{
|
||||
var before = Time.timeScale;
|
||||
|
||||
var response = TimeSettingsCommands.Set(
|
||||
new TimeSettingsInput { TimeScale = before + 5f },
|
||||
confirm: true,
|
||||
dryRun: true);
|
||||
|
||||
Assert.IsTrue(response.Success);
|
||||
Assert.IsTrue(response.DryRun);
|
||||
Assert.IsFalse(response.Applied);
|
||||
Assert.AreEqual(before, Time.timeScale, "dry run must not change the real setting");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetTimeSettings_WithoutConfirm_IsRejectedWithoutMutating()
|
||||
{
|
||||
var before = Time.timeScale;
|
||||
|
||||
var response = TimeSettingsCommands.Set(
|
||||
new TimeSettingsInput { TimeScale = before + 5f },
|
||||
confirm: false,
|
||||
dryRun: false);
|
||||
|
||||
Assert.IsFalse(response.Success);
|
||||
Assert.IsFalse(response.Applied);
|
||||
Assert.AreEqual(before, Time.timeScale, "an unconfirmed change must not mutate the setting");
|
||||
StringAssert.Contains("confirm=true", response.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user