From e26a22275524bd3d03467797a7c8bc043e2eb9dd Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sun, 5 Oct 2025 22:32:16 -0400 Subject: [PATCH] Allow nested searches for feature values --- SabreTools.CommandLine.Test/CommandSetTests.cs | 6 ++++-- SabreTools.CommandLine.Test/Inputs/UserInputTests.cs | 6 ++++-- SabreTools.CommandLine/CommandSet.cs | 8 +++++++- SabreTools.CommandLine/Inputs/UserInput.cs | 8 +++++++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/SabreTools.CommandLine.Test/CommandSetTests.cs b/SabreTools.CommandLine.Test/CommandSetTests.cs index 0f0ab01..2b8fad7 100644 --- a/SabreTools.CommandLine.Test/CommandSetTests.cs +++ b/SabreTools.CommandLine.Test/CommandSetTests.cs @@ -188,7 +188,7 @@ namespace SabreTools.CommandLine.Test } [Fact] - public void GetFeature_NestedExists_Null() + public void GetFeature_NestedExists_Returns() { var commandSet = new CommandSet(); var child = new MockUserInput("b", "b", "b"); @@ -200,7 +200,9 @@ namespace SabreTools.CommandLine.Test subChild.ProcessInput(["c"], ref index); Feature? actual = commandSet.GetFeature("c"); - Assert.Null(actual); + Assert.NotNull(actual); + Assert.Equal("c", actual.Name); + Assert.True(actual.Value); } #endregion diff --git a/SabreTools.CommandLine.Test/Inputs/UserInputTests.cs b/SabreTools.CommandLine.Test/Inputs/UserInputTests.cs index ce45511..ec97e31 100644 --- a/SabreTools.CommandLine.Test/Inputs/UserInputTests.cs +++ b/SabreTools.CommandLine.Test/Inputs/UserInputTests.cs @@ -154,7 +154,7 @@ namespace SabreTools.CommandLine.Test.Inputs } [Fact] - public void GetFeature_NestedExists_Null() + public void GetFeature_NestedExists_Returns() { UserInput userInput = new MockUserInput("a", "a", "a"); var child = new MockUserInput("b", "b", "b"); @@ -166,7 +166,9 @@ namespace SabreTools.CommandLine.Test.Inputs subChild.ProcessInput(["c"], ref index); Feature? actual = userInput.GetFeature("c"); - Assert.Null(actual); + Assert.NotNull(actual); + Assert.Equal("c", actual.Name); + Assert.True(actual.Value); } #endregion diff --git a/SabreTools.CommandLine/CommandSet.cs b/SabreTools.CommandLine/CommandSet.cs index 4fb4047..5f74713 100644 --- a/SabreTools.CommandLine/CommandSet.cs +++ b/SabreTools.CommandLine/CommandSet.cs @@ -325,7 +325,13 @@ namespace SabreTools.CommandLine return true; } - // TODO: Investigate if nested features should be supported + // Check all children recursively + foreach (var child in _inputs.Values) + { + if (child.TryGetFeature(key, out value)) + return true; + } + value = null; return false; } diff --git a/SabreTools.CommandLine/Inputs/UserInput.cs b/SabreTools.CommandLine/Inputs/UserInput.cs index 5c4be3c..07dbe70 100644 --- a/SabreTools.CommandLine/Inputs/UserInput.cs +++ b/SabreTools.CommandLine/Inputs/UserInput.cs @@ -343,7 +343,13 @@ namespace SabreTools.CommandLine.Inputs return true; } - // TODO: Investigate if nested features should be supported + // Check all children recursively + foreach (var child in Children.Values) + { + if (child.TryGetFeature(key, out value)) + return true; + } + value = null; return false; }