SetProjectSettingValueCommandTests.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using LLM.Editor.Commands;
  2. using LLM.Editor.Data;
  3. using NUnit.Framework;
  4. using UnityEngine;
  5. namespace LLM.Editor.Tests.Unit
  6. {
  7. [TestFixture]
  8. public class SetProjectSettingValueCommandTests
  9. {
  10. private CommandContext _context;
  11. private float _originalFixedDeltaTime;
  12. [SetUp]
  13. public void SetUp()
  14. {
  15. _context = new CommandContext();
  16. _originalFixedDeltaTime = Time.fixedDeltaTime;
  17. }
  18. [TearDown]
  19. public void TearDown()
  20. {
  21. Time.fixedDeltaTime = _originalFixedDeltaTime;
  22. }
  23. [Test]
  24. public void Execute_SetsWritablePropertyCorrectly()
  25. {
  26. // Arrange
  27. var command = new SetProjectSettingValueCommand
  28. {
  29. apiClassName = "UnityEngine.Time",
  30. memberName = "fixedDeltaTime",
  31. value = 0.05
  32. };
  33. // Act
  34. var result = command.Execute(_context);
  35. // Assert
  36. Assert.AreEqual(CommandOutcome.Success, result);
  37. Assert.AreEqual(0.05f, Time.fixedDeltaTime, 0.0001f);
  38. }
  39. [Test]
  40. public void Execute_WithInvalidApiClass_ReturnsError()
  41. {
  42. // Arrange
  43. var command = new SetProjectSettingValueCommand
  44. {
  45. apiClassName = "UnityEngine.NonExistentClass",
  46. memberName = "someMember",
  47. value = 123
  48. };
  49. // Act
  50. var result = command.Execute(_context);
  51. // Assert
  52. Assert.AreEqual(CommandOutcome.Error, result);
  53. Assert.IsTrue(_context.ErrorMessage.Contains("Could not find a class"));
  54. }
  55. [Test]
  56. public void Execute_WithInvalidMember_ReturnsError()
  57. {
  58. // Arrange
  59. var command = new SetProjectSettingValueCommand
  60. {
  61. apiClassName = "UnityEngine.Time",
  62. memberName = "nonExistentMember",
  63. value = 123
  64. };
  65. // Act
  66. var result = command.Execute(_context);
  67. // Assert
  68. Assert.AreEqual(CommandOutcome.Error, result);
  69. Assert.IsTrue(_context.ErrorMessage.Contains("Could not find a writable public static member"));
  70. }
  71. [Test]
  72. public void Execute_OnReadOnlyProperty_ReturnsError()
  73. {
  74. // Arrange
  75. var command = new SetProjectSettingValueCommand
  76. {
  77. apiClassName = "UnityEngine.Time",
  78. memberName = "time", // time is read-only
  79. value = 100f
  80. };
  81. // Act
  82. var result = command.Execute(_context);
  83. // Assert
  84. Assert.AreEqual(CommandOutcome.Error, result);
  85. Assert.IsTrue(_context.ErrorMessage.Contains("is read-only"));
  86. }
  87. }
  88. }