From 94cdc127d30d395f15e1bc7d2e16e9d2fedd5499 Mon Sep 17 00:00:00 2001 From: Benjamin Popp Date: Fri, 14 Jun 2019 22:06:51 -0500 Subject: [PATCH] Fix Plm Completion Bugs --- src/HexManiac.Core/Models/Runs/PLMRun.cs | 2 +- src/HexManiac.Core/SystemExtensions.cs | 9 +++++-- src/HexManiac.Tests/NestedTablesTests.cs | 33 ++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/HexManiac.Core/Models/Runs/PLMRun.cs b/src/HexManiac.Core/Models/Runs/PLMRun.cs index f47ab19f..bfe7c205 100644 --- a/src/HexManiac.Core/Models/Runs/PLMRun.cs +++ b/src/HexManiac.Core/Models/Runs/PLMRun.cs @@ -83,7 +83,7 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { public IEnumerable GetAutoCompleteOptions(string header) { var moveNames = ModelCacheScope.GetCache(model).GetOptions(EggMoveRun.MoveNamesTable); - return moveNames.Select(name => $"{header} {name} "); // autocomplete needs to complete after selection, so add a space + return moveNames.Select(name => $"{header} {name}" + (name.EndsWith("\"") ? "" : " ")); // autocomplete needs to complete after selection, so add a space if there's no quotes } public string SerializeRun() { diff --git a/src/HexManiac.Core/SystemExtensions.cs b/src/HexManiac.Core/SystemExtensions.cs index d0494a42..e92777be 100644 --- a/src/HexManiac.Core/SystemExtensions.cs +++ b/src/HexManiac.Core/SystemExtensions.cs @@ -51,8 +51,13 @@ namespace HavenSoft.HexManiac.Core { // no perfect match found. How about a partial match? var match = names.FirstOrDefault(name => name.Contains(input)); - if (match == null) return -1; - return names.IndexOf(match); + if (match != null) names.IndexOf(match); + + for (var i = 0; i < names.Count; i++) { + if (names[i].MatchesPartial(input)) return i; + } + + return -1; } } } diff --git a/src/HexManiac.Tests/NestedTablesTests.cs b/src/HexManiac.Tests/NestedTablesTests.cs index b0ac65f7..c0c7b71c 100644 --- a/src/HexManiac.Tests/NestedTablesTests.cs +++ b/src/HexManiac.Tests/NestedTablesTests.cs @@ -290,6 +290,39 @@ namespace HavenSoft.HexManiac.Tests { Assert.Contains("3 One", viewPort.Tools.StringTool.Content); } + [Fact] + public void AutoCompletePlmMoveNameContainingSpaceWorksWithNoQuotes() { + SetupMoveTable(0x00); + viewPort.SelectionStart = new Point(0, 1); // start of move "Two" + viewPort.Edit("Bob Par"); + SetupPlmStream(0x50, 8); + + viewPort.Goto.Execute("000000"); + viewPort.SelectionStart = new Point(2, 5); // should select '2 One' + viewPort.Edit("2 bobpar "); + + Assert.IsNotType(viewPort[2, 5].Format); + Assert.Contains("2 \"Bob Par\"", viewPort.Tools.StringTool.Content); + } + + [Fact] + public void ChoosingAutoCompleteOptionClosesPlmEdit() { + SetupMoveTable(0x00); + viewPort.SelectionStart = new Point(0, 1); // start of move "Two" + viewPort.Edit("Bob Par"); + SetupPlmStream(0x50, 8); + + viewPort.Goto.Execute("000000"); + viewPort.SelectionStart = new Point(2, 5); // should select '2 One' + viewPort.Edit("3 \"Bo"); + + var format = (UnderEdit)viewPort[2, 5].Format; + viewPort.Autocomplete(format.AutocompleteOptions[0].CompletionText); + + Assert.IsNotType(viewPort[2, 5].Format); + Assert.Contains("3 \"Bob Par\"", viewPort.Tools.StringTool.Content); + } + // creates a move table that is 0x40 bytes long private void SetupMoveTable(int start) { viewPort.Goto.Execute(start.ToString("X6"));