diff --git a/src/HexManiac.Core/Models/Runs/TrainerPokemonTeamRun.cs b/src/HexManiac.Core/Models/Runs/TrainerPokemonTeamRun.cs index eb1f9e0d..521777b7 100644 --- a/src/HexManiac.Core/Models/Runs/TrainerPokemonTeamRun.cs +++ b/src/HexManiac.Core/Models/Runs/TrainerPokemonTeamRun.cs @@ -309,7 +309,10 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { } private IEnumerable GetAutocompleteMoveOptions(string line, int caretIndex) { - throw new NotImplementedException(); + var namePart = line.Split("-")[1].Trim(); + return ArrayRunEnumSegment.GetOptions(model, HardcodeTablesModel.MoveNamesTable) + .Where(option => option.MatchesPartial(namePart, onlyCheckLettersAndDigits: true)) + .Select(option => new AutocompleteItem(option, $"- {option}")); } public bool DependsOn(string anchorName) => anchorName == HardcodeTablesModel.ItemsTableName || anchorName == HardcodeTablesModel.MoveNamesTable || anchorName == HardcodeTablesModel.PokemonNameTable; diff --git a/src/HexManiac.Tests/StreamTests.cs b/src/HexManiac.Tests/StreamTests.cs index 14e60e03..58512927 100644 --- a/src/HexManiac.Tests/StreamTests.cs +++ b/src/HexManiac.Tests/StreamTests.cs @@ -313,61 +313,5 @@ namespace HavenSoft.HexManiac.Tests { Assert.Equal("\"Poison Gas\"", options[0].Text); Assert.Equal("\"Poison Sting\"", options[1].Text); } - - [Fact] - public void TrainerTeam_RequestAutocompletePokemonLevel_NoOptions() { - CreateTextTable(HardcodeTablesModel.ItemsTableName, 0x100, "potion", "hyper potion", "rare candy", "masterball"); - CreateTextTable(HardcodeTablesModel.PokemonNameTable, 0x140, "bulbasaur", "farfetch'd", "nidoran \\sm", "mr. mime"); - CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x180, "tackle", "scratch", "hyper beam", "rest"); - var run = new TrainerPokemonTeamRun(Model, 0, SortedSpan.None); - - var options = run.GetAutoCompleteOptions("1 bulbasaur (3)", 0, 1); - - Assert.Empty(options); - } - - [Fact] - public void TrainerTeam_RequestAutocompletePokemonSpecies_CorrectOptions() { - CreateTextTable(HardcodeTablesModel.ItemsTableName, 0x100, "potion", "hyper potion", "rare candy", "masterball"); - CreateTextTable(HardcodeTablesModel.PokemonNameTable, 0x140, "bulbasaur", "farfetch'd", "nidoran \\sm", "mr. mime"); - CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x180, "tackle", "scratch", "hyper beam", "rest"); - var run = new TrainerPokemonTeamRun(Model, 0, SortedSpan.None); - - var options = run.GetAutoCompleteOptions("1 i (3) @potion", 0, 3); - - Assert.Equal(2, options.Count); - Assert.Equal("1 \"nidoran \\sm\" (3) @potion", options[0].LineText); - Assert.Equal("\"mr. mime\"", options[1].Text); - } - - [Fact] - public void TrainerTeam_RequestAutocompletePokemonIVs_NoOptions() { - CreateTextTable(HardcodeTablesModel.ItemsTableName, 0x100, "potion", "hyper potion", "rare candy", "masterball"); - CreateTextTable(HardcodeTablesModel.PokemonNameTable, 0x140, "bulbasaur", "farfetch'd", "nidoran \\sm", "mr. mime"); - CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x180, "tackle", "scratch", "hyper beam", "rest"); - var run = new TrainerPokemonTeamRun(Model, 0, SortedSpan.None); - - var options = run.GetAutoCompleteOptions("1 i (3) @potion", 0, 6); - - Assert.Empty(options); - } - - [Fact] - public void TrainerTeam_RequestAutocompleteItem_CorrectOptions() { - CreateTextTable(HardcodeTablesModel.ItemsTableName, 0x100, "potion", "hyper potion", "rare candy", "masterball"); - CreateTextTable(HardcodeTablesModel.PokemonNameTable, 0x140, "bulbasaur", "farfetch'd", "nidoran \\sm", "mr. mime"); - CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x180, "tackle", "scratch", "hyper beam", "rest"); - var run = new TrainerPokemonTeamRun(Model, 0, SortedSpan.None); - - var options = run.GetAutoCompleteOptions("1 i (3) @potion", 0, 12); - - Assert.Equal(2, options.Count); - Assert.Equal("1 i (3) @potion", options[0].LineText); - Assert.Equal("\"hyper potion\"", options[1].Text); - } - - // TODO test how it works for trainer teams (moves) - // TODO test how it works for item effects (elements) - // TODO test how it works for item effects (enums) } } diff --git a/src/HexManiac.Tests/TrainerTeamTests.cs b/src/HexManiac.Tests/TrainerTeamTests.cs new file mode 100644 index 00000000..42932a33 --- /dev/null +++ b/src/HexManiac.Tests/TrainerTeamTests.cs @@ -0,0 +1,61 @@ +using HavenSoft.HexManiac.Core; +using HavenSoft.HexManiac.Core.Models; +using HavenSoft.HexManiac.Core.Models.Runs; +using System.Linq; +using Xunit; + +namespace HavenSoft.HexManiac.Tests { + public class TrainerTeamTests : BaseViewModelTestClass { + private readonly TrainerPokemonTeamRun run; + + public TrainerTeamTests() { + CreateTextTable(HardcodeTablesModel.ItemsTableName, 0x100, "potion", "hyper potion", "rare candy", "masterball"); + CreateTextTable(HardcodeTablesModel.PokemonNameTable, 0x140, "bulbasaur", "farfetch'd", "nidoran \\sm", "mr. mime"); + CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x180, "tackle", "scratch", "hyper beam", "rest"); + run = new TrainerPokemonTeamRun(Model, 0, SortedSpan.None); + } + + [Fact] + public void TrainerTeam_RequestAutocompletePokemonLevel_NoOptions() { + var options = run.GetAutoCompleteOptions("1 bulbasaur (3)", 0, 1); + + Assert.Empty(options); + } + + [Fact] + public void TrainerTeam_RequestAutocompletePokemonSpecies_CorrectOptions() { + var options = run.GetAutoCompleteOptions("1 i (3) @potion", 0, 3); + + Assert.Equal(2, options.Count); + Assert.Equal("1 \"nidoran \\sm\" (3) @potion", options[0].LineText); + Assert.Equal("\"mr. mime\"", options[1].Text); + } + + [Fact] + public void TrainerTeam_RequestAutocompletePokemonIVs_NoOptions() { + var options = run.GetAutoCompleteOptions("1 i (3) @potion", 0, 6); + + Assert.Empty(options); + } + + [Fact] + public void TrainerTeam_RequestAutocompleteItem_CorrectOptions() { + var options = run.GetAutoCompleteOptions("1 i (3) @potion", 0, 12); + + Assert.Equal(2, options.Count); + Assert.Equal("1 i (3) @potion", options[0].LineText); + Assert.Equal("\"hyper potion\"", options[1].Text); + } + + + [Fact] + public void TrainerTeam_RequestAutocompleteMove_CorrectOptions() { + var options = run.GetAutoCompleteOptions("- t", 0, 12); + + Assert.Equal(3, options.Count); + Assert.Equal("- tackle", options[0].LineText); + Assert.Equal("scratch", options[1].Text); + Assert.Equal("rest", options[2].Text); + } + } +}