Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 32 additions & 20 deletions Source/ViewModels/RequirementGroupViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,11 @@ public RequirementGroupViewModel(string label,
{
Label = label;

bool isValueDependentOnPreviousRequirement = false;
var list = new List<RequirementViewModel>();
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;
}

Expand Down Expand Up @@ -193,6 +175,34 @@ private static bool GetBestMerge(List<RequirementViewModel> list, out int leftIn
return (bestLeft != -1);
}

private static void UpdateDependencies(List<RequirementViewModel> 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<RequirementViewModel> list, RequirementEx left, RequirementEx right, NumberFormat numberFormat, IDictionary<uint, CodeNote> notes)
{
if (right == null)
Expand Down Expand Up @@ -447,6 +457,8 @@ public RequirementGroupViewModel(string label, IEnumerable<Requirement> requirem
list.RemoveAt(rightIndex);
}

UpdateDependencies(list);

Requirements = list;
}

Expand Down
36 changes: 34 additions & 2 deletions Tests/ViewModels/RequirementGroupViewModelTests.cs
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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<ISettings>();
mockSettings.Setup(s => s.HexValues).Returns(false);
ServiceRepository.Reset();
ServiceRepository.Instance.RegisterInstance(mockSettings.Object);

var notes = new Dictionary<uint, CodeNote>();

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));
}
}
}
Loading