start #33, test some functions
continuous-integration/drone/push Build is passing Details

pull/35/head
Alexandre AGOSTINHO 2 years ago
parent 0649ddba15
commit e1c1b428c2

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
public interface IResearchMenu<T>
{
void updateDisplay(string researchStr, T[] researchResult);
}
}

@ -2,7 +2,7 @@
using ConsoleApp;
using Model;
using System.Text;
Console.WriteLine("Hello, World!\n\n");
@ -14,8 +14,44 @@ Stub stub = new Stub();
List<Recipe> recipes = stub.LoadRecipes();
List<RecipeCollection> recipeCollections = stub.LoadRecipeCollection();
foreach (Recipe r in recipes)
Console.WriteLine(r);
foreach (RecipeCollection r in recipeCollections)
Console.WriteLine(r);
RecipeCollection? allRecipe = recipeCollections.Find(x => x.Description.Equals("All"));
if (allRecipe == null)
throw new ArgumentException("Load AllRecipe in stub: can't find 'All'.");
StringBuilder sb = new StringBuilder();
ResearchMenuRecipe researchMenu = new ResearchMenuRecipe();
Recipe[] result = allRecipe.ResearchByName(sb.ToString());
researchMenu.UpdateDisplay(sb.ToString(), result);
ConsoleKeyInfo cki;
do
{
cki = Console.ReadKey(true);
switch (cki.Key)
{
case ConsoleKey.UpArrow:
researchMenu.SelectPrevioustLine();
break;
case ConsoleKey.DownArrow:
researchMenu.SelectNextLine();
break;
case ConsoleKey.Backspace:
if (sb.Length > 0)
{
sb.Remove(sb.Length - 1, 1);
result = allRecipe.ResearchByName(sb.ToString());
}
break;
default:
sb.Append(cki.KeyChar);
result = allRecipe.ResearchByName(sb.ToString());
break;
}
researchMenu.UpdateDisplay(sb.ToString(), result);
} while (cki.Key != ConsoleKey.Enter);
Console.WriteLine(researchMenu.ReturnSelected());

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
namespace ConsoleApp
{
internal class ResearchMenuRecipe
{
internal string displayText = "";
public int CurrentLine
{
get => currentLine;
set
{
currentLine = value;
if (currentLine > maxLines)
{
currentLine = maxLines;
}
if (currentLine < 0)
{
currentLine = 0;
}
return;
}
}
private int currentLine = 0;
private int maxLines = 0;
private Recipe? currentSelected;
public void UpdateDisplay(string researchStr, Recipe[] researchResult)
{
maxLines = researchResult.Length - 1;
StringBuilder sb = new StringBuilder();
sb.AppendLine("---------------------------------------------------------");
sb.AppendLine($" Research: {researchStr}");
sb.AppendLine("---------------------------------------------------------");
for (int i = 0; i < researchResult.Length; i++)
{
if (i == CurrentLine)
{
currentSelected = researchResult[i];
sb.Append($">");
}
sb.AppendLine($" [ {researchResult[i].Id} ]: {researchResult[i].Title} ");
}
Console.Clear();
Console.WriteLine(sb);
}
public int SelectNextLine()
{
return ++CurrentLine;
}
public int SelectPrevioustLine()
{
return --CurrentLine;
}
public Recipe? ReturnSelected()
{
return currentSelected;
}
}
}

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public interface IReasearch<T>
{
public T ResearchByName(string str);
}
}

@ -149,6 +149,11 @@ namespace Model
}
return sb.ToString();
}
public Recipe[] ResearchByName(string str)
{
return _recipes.FindAll(x => x.Title.ToLower().Contains(str.ToLower())).ToArray();
}
#endregion
}
}

Loading…
Cancel
Save