| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using System.Text.Json;
- using XafPet.Desktop.PetEngine;
- using Xunit;
- namespace XafPet.Desktop.Tests;
- public class PetConfigTests
- {
- private const string ValidJson = """
- {
- "version": "1.0",
- "type": "animal",
- "species": "cockatiel",
- "gender": "female",
- "image_base_url": "./DefaultPets/xibao/",
- "default_image": "standing.png",
- "actions": {
- "idle": "wings_idle",
- "happy": "wings_spread",
- "custom_state_1": "user_animation_1"
- },
- "parameters": {
- "move_distance": 15,
- "animation_speed": 1.0,
- "interaction_timeout": 300
- }
- }
- """;
- [Fact]
- public void Parse_ValidJson_LoadsAllFields()
- {
- var config = PetConfig.Parse(ValidJson);
- Assert.Equal("1.0", config.Version);
- Assert.Equal(PetType.Animal, config.Type);
- Assert.Equal("cockatiel", config.Species);
- Assert.Equal("female", config.Gender);
- Assert.Equal("./DefaultPets/xibao/", config.ImageBaseUrl);
- Assert.Equal("standing.png", config.DefaultImage);
- Assert.Equal("wings_idle", config.Actions["idle"]);
- Assert.Equal(15, config.Parameters.MoveDistance);
- }
- [Fact]
- public void Parse_MissingActionsKey_UsesDefaults()
- {
- var json = """{ "version": "1.0", "type": "human", "image_base_url": "./pets/", "default_image": "a.png" }""";
- var config = PetConfig.Parse(json);
- Assert.Equal("idle", config.Actions["idle"]);
- }
- [Fact]
- public void Parse_InvalidJson_ThrowsJsonException()
- {
- Assert.Throws<JsonException>(() => PetConfig.Parse("{ not valid json"));
- }
- [Fact]
- public void Parse_CustomStates_CountedCorrectly()
- {
- var config = PetConfig.Parse(ValidJson);
- Assert.Equal(1, config.CustomStateCount);
- Assert.Equal("user_animation_1", config.GetActionForState("custom_state_1"));
- }
- }
|