using AcDream.Core.CharGen; namespace AcDream.Core.Tests.CharGen; /// /// Tests for the / /// lookup helpers, built from hand-crafted synthetic records (no DAT /// dependency — the installed-DAT read path is covered separately by /// AcDream.Content.Tests.CharGen). /// public sealed class ChargenOptionsTests { private static ChargenHeritageOptions MakeHeritage(uint id, string name) => new( HeritageId: id, Name: name, IconId: 0x06000001u, SetupId: 0x02000001u, EnvironmentSetupId: 0x02000002u, AttributeCredits: 180u, SkillCredits: 100u, PrimaryStartAreaIndices: [0], SecondaryStartAreaIndices: [], SkillCostsBySkillId: new Dictionary(), Templates: [], GendersByKey: new Dictionary()); [Fact] public void Empty_HasNoStarterAreasOrHeritages() { Assert.Empty(ChargenOptions.Empty.StarterAreas); Assert.Empty(ChargenOptions.Empty.HeritagesById); } [Fact] public void TryGetHeritage_FindsRegisteredHeritageById() { var aluvian = MakeHeritage(1u, "Aluvian"); var options = new ChargenOptions( [], new Dictionary { [1u] = aluvian }, new Dictionary()); Assert.True(options.TryGetHeritage(1u, out ChargenHeritageOptions? found)); Assert.Same(aluvian, found); } [Fact] public void TryGetHeritage_MissingIdReturnsFalse() { var options = ChargenOptions.Empty; Assert.False(options.TryGetHeritage(1u, out _)); } [Fact] public void TryGetStarterArea_ResolvesByIndexAndRejectsOutOfRange() { var area = new ChargenStarterArea(0, "Holtburg", []); var options = new ChargenOptions( [area], new Dictionary(), new Dictionary()); Assert.True(options.TryGetStarterArea(0, out ChargenStarterArea? found)); Assert.Same(area, found); Assert.False(options.TryGetStarterArea(1, out _)); Assert.False(options.TryGetStarterArea(-1, out _)); } [Theory] [InlineData(1u, false)] // Aluvian [InlineData(11u, false)] // Undead [InlineData(12u, true)] // Olthoi [InlineData(13u, true)] // OlthoiAcid public void IsOlthoi_TrueOnlyForTheTwoOlthoiVariants(uint heritageId, bool expected) { ChargenHeritageOptions heritage = MakeHeritage(heritageId, "Test"); Assert.Equal(expected, heritage.IsOlthoi); } }