Browse Source

More append tests

Thomas 2 years ago
parent
commit
66d89c6f3e
1 changed files with 60 additions and 11 deletions
  1. 60 11
      UnitTests/Views/AppendAutocompleteTests.cs

+ 60 - 11
UnitTests/Views/AppendAutocompleteTests.cs

@@ -48,12 +48,13 @@ namespace Terminal.Gui.ViewTests {
 			Assert.NotSame(tf,Application.Top.Focused);
         }
 
-		        [Fact, AutoInitShutdown]
+		[Fact, AutoInitShutdown]
         public void TestAutoAppend_AfterCloseKey_NoAutocomplete()
         {
-			var tf = GetTextFieldsInViewSuggestingFish();
+			var tf = GetTextFieldsInViewSuggesting("fish");
 
 			// f is typed and suggestion is "fish"
+			Application.Driver.SendKeys('f',ConsoleKey.F,false,false,false);
 			tf.Redraw(tf.Bounds);
 			TestHelpers.AssertDriverContentsAre("fish",output);
 			Assert.Equal("f",tf.Text.ToString());
@@ -74,23 +75,71 @@ namespace Terminal.Gui.ViewTests {
 			Assert.NotSame(tf,Application.Top.Focused);
         }
 
-		private TextField GetTextFieldsInViewSuggestingFish ()
-		{
-			var tf = GetTextFieldsInView();
-			
-			tf.Autocomplete = new AppendAutocomplete(tf);
-			var generator = (SingleWordSuggestionGenerator)tf.Autocomplete.SuggestionGenerator;
-			generator.AllSuggestions = new List<string>{"fish"};
+		[Fact, AutoInitShutdown]
+        public void TestAutoAppend_AfterCloseKey_ReapearsOnLetter()
+        {
+			var tf = GetTextFieldsInViewSuggesting("fish");
 
+			// f is typed and suggestion is "fish"
+			Application.Driver.SendKeys('f',ConsoleKey.F,false,false,false);
 			tf.Redraw(tf.Bounds);
-			TestHelpers.AssertDriverContentsAre("",output);
+			TestHelpers.AssertDriverContentsAre("fish",output);
+			Assert.Equal("f",tf.Text.ToString());
 
-			tf.ProcessKey(new KeyEvent(Key.f,new KeyModifiers()));
+			// When cancelling autocomplete
+			Application.Driver.SendKeys('e',ConsoleKey.Escape,false,false,false);
 
+			// Suggestion should disapear
+			tf.Redraw(tf.Bounds);
+			TestHelpers.AssertDriverContentsAre("f",output);
+			Assert.Equal("f",tf.Text.ToString());
+
+			// Should reapear when you press next letter
+			Application.Driver.SendKeys('i',ConsoleKey.I,false,false,false);
+			tf.Redraw(tf.Bounds);
+			TestHelpers.AssertDriverContentsAre("fish",output);
+			Assert.Equal("fi",tf.Text.ToString());
+        }
+
+
+		[Theory, AutoInitShutdown]
+		[InlineData(ConsoleKey.UpArrow)]
+		[InlineData(ConsoleKey.DownArrow)]
+        public void TestAutoAppend_CycleSelections(ConsoleKey cycleKey)
+        {
+			var tf = GetTextFieldsInViewSuggesting("fish","friend");
+
+			// f is typed and suggestion is "fish"
+			Application.Driver.SendKeys('f',ConsoleKey.F,false,false,false);
+			tf.Redraw(tf.Bounds);
+			TestHelpers.AssertDriverContentsAre("fish",output);
+			Assert.Equal("f",tf.Text.ToString());
+
+			// When cycling autocomplete
+			Application.Driver.SendKeys(' ',cycleKey,false,false,false);
+
+			tf.Redraw(tf.Bounds);
+			TestHelpers.AssertDriverContentsAre("friend",output);
+			Assert.Equal("f",tf.Text.ToString());
+
+			// Should be able to cycle in circles endlessly
+			Application.Driver.SendKeys(' ',cycleKey,false,false,false);
 			tf.Redraw(tf.Bounds);
 			TestHelpers.AssertDriverContentsAre("fish",output);
 			Assert.Equal("f",tf.Text.ToString());
+        }
 
+		private TextField GetTextFieldsInViewSuggesting (params string[] suggestions)
+		{
+			var tf = GetTextFieldsInView();
+			
+			tf.Autocomplete = new AppendAutocomplete(tf);
+			var generator = (SingleWordSuggestionGenerator)tf.Autocomplete.SuggestionGenerator;
+			generator.AllSuggestions = suggestions.ToList();
+
+			tf.Redraw(tf.Bounds);
+			TestHelpers.AssertDriverContentsAre("",output);
+			
 			return tf;
 		}