From f6ebcabb1129639166471293f52e48a673c51b5a Mon Sep 17 00:00:00 2001 From: Jamiras Date: Fri, 16 Jan 2026 18:11:59 -0700 Subject: [PATCH] fix display logic for combining conditions when using comparison constructor --- .../ViewModels/RequirementGroupViewModel.cs | 52 ++++++++++++------- .../RequirementGroupViewModelTests.cs | 36 ++++++++++++- 2 files changed, 66 insertions(+), 22 deletions(-) diff --git a/Source/ViewModels/RequirementGroupViewModel.cs b/Source/ViewModels/RequirementGroupViewModel.cs index 09bcadb4..486a244a 100644 --- a/Source/ViewModels/RequirementGroupViewModel.cs +++ b/Source/ViewModels/RequirementGroupViewModel.cs @@ -19,29 +19,11 @@ public RequirementGroupViewModel(string label, { Label = label; - bool isValueDependentOnPreviousRequirement = false; var list = new List(); foreach (var requirement in requirements) - { - var requirementViewModel = new RequirementViewModel(requirement, numberFormat, notes); - requirementViewModel.IsValueDependentOnPreviousRequirement = isValueDependentOnPreviousRequirement; - - list.Add(requirementViewModel); - - switch (requirement.Type) - { - case RequirementType.AddAddress: - case RequirementType.AddSource: - case RequirementType.SubSource: - isValueDependentOnPreviousRequirement = true; - break; - - default: - isValueDependentOnPreviousRequirement = false; - break; - } - } + list.Add(new RequirementViewModel(requirement, numberFormat, notes)); + UpdateDependencies(list); Requirements = list; } @@ -193,6 +175,34 @@ private static bool GetBestMerge(List list, out int leftIn return (bestLeft != -1); } + private static void UpdateDependencies(List list) + { + bool isValueDependentOnPreviousRequirement = false; + foreach (var requirement in list) + { + requirement.IsValueDependentOnPreviousRequirement = isValueDependentOnPreviousRequirement; + + if (requirement.Requirement == null) + { + isValueDependentOnPreviousRequirement = false; + continue; + } + + switch (requirement.Requirement.Type) + { + case RequirementType.AddAddress: + case RequirementType.AddSource: + case RequirementType.SubSource: + isValueDependentOnPreviousRequirement = true; + break; + + default: + isValueDependentOnPreviousRequirement = false; + break; + } + } + } + private void AppendRequirements(List list, RequirementEx left, RequirementEx right, NumberFormat numberFormat, IDictionary notes) { if (right == null) @@ -447,6 +457,8 @@ public RequirementGroupViewModel(string label, IEnumerable requirem list.RemoveAt(rightIndex); } + UpdateDependencies(list); + Requirements = list; } diff --git a/Tests/ViewModels/RequirementGroupViewModelTests.cs b/Tests/ViewModels/RequirementGroupViewModelTests.cs index fe7a50a8..3600d777 100644 --- a/Tests/ViewModels/RequirementGroupViewModelTests.cs +++ b/Tests/ViewModels/RequirementGroupViewModelTests.cs @@ -1,11 +1,11 @@ using Jamiras.Components; +using Moq; using NUnit.Framework; using RATools.Data; using RATools.Parser; +using RATools.Services; using RATools.ViewModels; -using System; using System.Collections.Generic; -using System.Linq; using System.Text; namespace RATools.Tests.ViewModels @@ -65,5 +65,37 @@ public void TestDiff(string leftSerialized, string rightSerialized, string expec Assert.That(strBuilder.ToString(), Is.EqualTo(expected)); } + + [TestCase("A:0xH1234/4_M:0=100", "byte(0x001234) / 4 + |\nmeasured(0 == 100)|")] + public void TestDisplay(string serialized, string expected) + { + var mockSettings = new Mock(); + mockSettings.Setup(s => s.HexValues).Returns(false); + ServiceRepository.Reset(); + ServiceRepository.Instance.RegisterInstance(mockSettings.Object); + + var notes = new Dictionary(); + + var builder = new AchievementBuilder(); + builder.ParseRequirements(Tokenizer.CreateTokenizer(serialized)); + var leftRequirements = builder.ToAchievement().CoreRequirements; + + var vmRequirementGroup = new RequirementGroupViewModel("Group", leftRequirements, new Requirement[0], NumberFormat.Decimal, notes); + + var strBuilder = new StringBuilder(); + foreach (var vmRequirement in vmRequirementGroup.Requirements) + { + var vmComparison = vmRequirement as RequirementComparisonViewModel; + strBuilder.Append(vmComparison.Definition); + strBuilder.Append('|'); + strBuilder.Append(vmComparison.OtherDefinition); + strBuilder.Append('\n'); + } + strBuilder.Length--; + + ServiceRepository.Reset(); + + Assert.That(strBuilder.ToString(), Is.EqualTo(expected)); + } } }