PetConfigTests.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System.Text.Json;
  2. using XafPet.Desktop.PetEngine;
  3. using Xunit;
  4. namespace XafPet.Desktop.Tests;
  5. public class PetConfigTests
  6. {
  7. private const string ValidJson = """
  8. {
  9. "version": "1.0",
  10. "type": "animal",
  11. "species": "cockatiel",
  12. "gender": "female",
  13. "image_base_url": "./DefaultPets/xibao/",
  14. "default_image": "standing.png",
  15. "actions": {
  16. "idle": "wings_idle",
  17. "happy": "wings_spread",
  18. "custom_state_1": "user_animation_1"
  19. },
  20. "parameters": {
  21. "move_distance": 15,
  22. "animation_speed": 1.0,
  23. "interaction_timeout": 300
  24. }
  25. }
  26. """;
  27. [Fact]
  28. public void Parse_ValidJson_LoadsAllFields()
  29. {
  30. var config = PetConfig.Parse(ValidJson);
  31. Assert.Equal("1.0", config.Version);
  32. Assert.Equal(PetType.Animal, config.Type);
  33. Assert.Equal("cockatiel", config.Species);
  34. Assert.Equal("female", config.Gender);
  35. Assert.Equal("./DefaultPets/xibao/", config.ImageBaseUrl);
  36. Assert.Equal("standing.png", config.DefaultImage);
  37. Assert.Equal("wings_idle", config.Actions["idle"]);
  38. Assert.Equal(15, config.Parameters.MoveDistance);
  39. }
  40. [Fact]
  41. public void Parse_MissingActionsKey_UsesDefaults()
  42. {
  43. var json = """{ "version": "1.0", "type": "human", "image_base_url": "./pets/", "default_image": "a.png" }""";
  44. var config = PetConfig.Parse(json);
  45. Assert.Equal("idle", config.Actions["idle"]);
  46. }
  47. [Fact]
  48. public void Parse_InvalidJson_ThrowsJsonException()
  49. {
  50. Assert.Throws<JsonException>(() => PetConfig.Parse("{ not valid json"));
  51. }
  52. [Fact]
  53. public void Parse_CustomStates_CountedCorrectly()
  54. {
  55. var config = PetConfig.Parse(ValidJson);
  56. Assert.Equal(1, config.CustomStateCount);
  57. Assert.Equal("user_animation_1", config.GetActionForState("custom_state_1"));
  58. }
  59. }