GetComponentSchemaProviderTests.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using NUnit.Framework;
  2. using LLM.Editor.Analysis;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using UnityEngine;
  6. namespace LLM.Editor.Tests.Unit
  7. {
  8. // A helper component for testing schema discovery
  9. public class SchemaTestComponent : MonoBehaviour
  10. {
  11. public int publicField;
  12. public string PublicProperty { get; set; }
  13. [SerializeField] protected bool protectedField;
  14. internal int internalField; // Should not be found
  15. private string PrivateProperty { get; set; } // Should not be found
  16. [System.Obsolete]
  17. public int obsoleteField; // Should not be found
  18. [HideInInspector]
  19. public float hiddenField; // Should not be found
  20. }
  21. [TestFixture]
  22. public class GetComponentSchemaProviderTests
  23. {
  24. private GetComponentSchemaProvider _provider;
  25. [SetUp]
  26. public void SetUp()
  27. {
  28. _provider = new GetComponentSchemaProvider();
  29. }
  30. [Test]
  31. public void GetContext_WithStandardComponent_ReturnsCorrectSchema()
  32. {
  33. // Arrange
  34. var qualifier = "UnityEngine.Transform";
  35. // Act
  36. var context = _provider.GetContext(null, qualifier);
  37. // Assert
  38. Assert.IsInstanceOf<List<GetComponentSchemaProvider.MemberSchema>>(context);
  39. var schema = (List<GetComponentSchemaProvider.MemberSchema>)context;
  40. Assert.IsNotEmpty(schema);
  41. var memberNames = schema.Select(s => s.name).ToList();
  42. // Check for some well-known, writable properties of Transform
  43. Assert.Contains("position", memberNames);
  44. Assert.Contains("rotation", memberNames);
  45. Assert.Contains("localScale", memberNames);
  46. Assert.Contains("parent", memberNames);
  47. }
  48. [Test]
  49. public void GetContext_WithCustomComponent_ReturnsCorrectSchema()
  50. {
  51. // Arrange
  52. var qualifier = "LLM.Editor.Tests.Unit.SchemaTestComponent";
  53. // Act
  54. var context = _provider.GetContext(null, qualifier);
  55. // Assert
  56. Assert.IsInstanceOf<List<GetComponentSchemaProvider.MemberSchema>>(context);
  57. var schema = (List<GetComponentSchemaProvider.MemberSchema>)context;
  58. var memberNames = schema.Select(s => s.name).ToList();
  59. // 1. Check for members defined in SchemaTestComponent
  60. Assert.Contains("publicField", memberNames, "Should find public fields.");
  61. Assert.Contains("PublicProperty", memberNames, "Should find public properties.");
  62. Assert.Contains("protectedField", memberNames, "Should find fields with [SerializeField] attribute.");
  63. // 2. Check for inherited members from MonoBehaviour/Behaviour
  64. Assert.Contains("enabled", memberNames, "Should find inherited public properties like 'enabled'.");
  65. Assert.Contains("tag", memberNames, "Should find inherited public properties like 'tag'.");
  66. // 3. Check that non-serialized or obsolete members are excluded
  67. Assert.IsFalse(memberNames.Contains("internalField"), "Internal fields without [SerializeField] should be excluded.");
  68. Assert.IsFalse(memberNames.Contains("PrivateProperty"), "Private properties should be excluded.");
  69. Assert.IsFalse(memberNames.Contains("obsoleteField"), "Obsolete members should be excluded.");
  70. Assert.IsFalse(memberNames.Contains("hiddenField"), "Members with [HideInInspector] should be excluded.");
  71. }
  72. [Test]
  73. public void GetContext_WithInvalidType_ReturnsErrorString()
  74. {
  75. // Arrange
  76. var qualifier = "Invalid.Component.TypeName";
  77. // Act
  78. var context = _provider.GetContext(null, qualifier);
  79. // Assert
  80. Assert.IsInstanceOf<string>(context);
  81. Assert.IsTrue(((string)context).Contains("Could not find a Component type"));
  82. }
  83. }
  84. }