AutocompleteTests.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7. using Terminal.Gui;
  8. using Xunit;
  9. namespace Terminal.Gui.ViewTests {
  10. public class AutocompleteTests {
  11. [Fact]
  12. public void Test_GenerateSuggestions_Simple ()
  13. {
  14. var ac = new TextViewAutocomplete ();
  15. ac.AllSuggestions = new List<string> { "fish", "const", "Cobble" };
  16. var tv = new TextView ();
  17. tv.InsertText ("co");
  18. ac.HostControl = tv;
  19. ac.GenerateSuggestions ();
  20. Assert.Equal (2, ac.Suggestions.Count);
  21. Assert.Equal ("const", ac.Suggestions [0]);
  22. Assert.Equal ("Cobble", ac.Suggestions [1]);
  23. }
  24. [Fact]
  25. [AutoInitShutdown]
  26. public void TestSettingColorSchemeOnAutocomplete ()
  27. {
  28. var tv = new TextView ();
  29. // to begin with we should be using the default menu color scheme
  30. Assert.Same (Colors.Menu, tv.Autocomplete.ColorScheme);
  31. // allocate a new custom scheme
  32. tv.Autocomplete.ColorScheme = new ColorScheme () {
  33. Normal = Application.Driver.MakeAttribute (Color.Black, Color.Blue),
  34. Focus = Application.Driver.MakeAttribute (Color.Black, Color.Cyan),
  35. };
  36. // should be separate instance
  37. Assert.NotSame (Colors.Menu, tv.Autocomplete.ColorScheme);
  38. // with the values we set on it
  39. Assert.Equal (Color.Black, tv.Autocomplete.ColorScheme.Normal.Foreground);
  40. Assert.Equal (Color.Blue, tv.Autocomplete.ColorScheme.Normal.Background);
  41. Assert.Equal (Color.Black, tv.Autocomplete.ColorScheme.Focus.Foreground);
  42. Assert.Equal (Color.Cyan, tv.Autocomplete.ColorScheme.Focus.Background);
  43. }
  44. [Fact]
  45. [AutoInitShutdown]
  46. public void KeyBindings_Command ()
  47. {
  48. var tv = new TextView () {
  49. Width = 10,
  50. Height = 2,
  51. Text = " Fortunately super feature."
  52. };
  53. var top = Application.Top;
  54. top.Add (tv);
  55. Application.Begin (top);
  56. Assert.Equal (Point.Empty, tv.CursorPosition);
  57. Assert.NotNull (tv.Autocomplete);
  58. Assert.Empty (tv.Autocomplete.AllSuggestions);
  59. tv.Autocomplete.AllSuggestions = Regex.Matches (tv.Text.ToString (), "\\w+")
  60. .Select (s => s.Value)
  61. .Distinct ().ToList ();
  62. Assert.Equal (3, tv.Autocomplete.AllSuggestions.Count);
  63. Assert.Equal ("Fortunately", tv.Autocomplete.AllSuggestions [0]);
  64. Assert.Equal ("super", tv.Autocomplete.AllSuggestions [1]);
  65. Assert.Equal ("feature", tv.Autocomplete.AllSuggestions [^1]);
  66. Assert.Equal (0, tv.Autocomplete.SelectedIdx);
  67. Assert.Empty (tv.Autocomplete.Suggestions);
  68. Assert.True (tv.ProcessKey (new KeyEvent (Key.F, new KeyModifiers ())));
  69. top.Redraw (tv.Bounds);
  70. Assert.Equal ($"F Fortunately super feature.", tv.Text);
  71. Assert.Equal (new Point (1, 0), tv.CursorPosition);
  72. Assert.Equal (2, tv.Autocomplete.Suggestions.Count);
  73. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [0]);
  74. Assert.Equal ("feature", tv.Autocomplete.Suggestions [^1]);
  75. Assert.Equal (0, tv.Autocomplete.SelectedIdx);
  76. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [tv.Autocomplete.SelectedIdx]);
  77. Assert.True (tv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  78. top.Redraw (tv.Bounds);
  79. Assert.Equal ($"F Fortunately super feature.", tv.Text);
  80. Assert.Equal (new Point (1, 0), tv.CursorPosition);
  81. Assert.Equal (2, tv.Autocomplete.Suggestions.Count);
  82. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [0]);
  83. Assert.Equal ("feature", tv.Autocomplete.Suggestions [^1]);
  84. Assert.Equal (1, tv.Autocomplete.SelectedIdx);
  85. Assert.Equal ("feature", tv.Autocomplete.Suggestions [tv.Autocomplete.SelectedIdx]);
  86. Assert.True (tv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
  87. top.Redraw (tv.Bounds);
  88. Assert.Equal ($"F Fortunately super feature.", tv.Text);
  89. Assert.Equal (new Point (1, 0), tv.CursorPosition);
  90. Assert.Equal (2, tv.Autocomplete.Suggestions.Count);
  91. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [0]);
  92. Assert.Equal ("feature", tv.Autocomplete.Suggestions [^1]);
  93. Assert.Equal (0, tv.Autocomplete.SelectedIdx);
  94. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [tv.Autocomplete.SelectedIdx]);
  95. Assert.True (tv.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  96. top.Redraw (tv.Bounds);
  97. Assert.Equal ($"F Fortunately super feature.", tv.Text);
  98. Assert.Equal (new Point (1, 0), tv.CursorPosition);
  99. Assert.Equal (2, tv.Autocomplete.Suggestions.Count);
  100. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [0]);
  101. Assert.Equal ("feature", tv.Autocomplete.Suggestions [^1]);
  102. Assert.Equal (1, tv.Autocomplete.SelectedIdx);
  103. Assert.Equal ("feature", tv.Autocomplete.Suggestions [tv.Autocomplete.SelectedIdx]);
  104. Assert.True (tv.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
  105. top.Redraw (tv.Bounds);
  106. Assert.Equal ($"F Fortunately super feature.", tv.Text);
  107. Assert.Equal (new Point (1, 0), tv.CursorPosition);
  108. Assert.Equal (2, tv.Autocomplete.Suggestions.Count);
  109. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [0]);
  110. Assert.Equal ("feature", tv.Autocomplete.Suggestions [^1]);
  111. Assert.Equal (0, tv.Autocomplete.SelectedIdx);
  112. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [tv.Autocomplete.SelectedIdx]);
  113. Assert.True (tv.Autocomplete.Visible);
  114. top.Redraw (tv.Bounds);
  115. Assert.True (tv.ProcessKey (new KeyEvent (tv.Autocomplete.CloseKey, new KeyModifiers ())));
  116. Assert.Equal ($"F Fortunately super feature.", tv.Text);
  117. Assert.Equal (new Point (1, 0), tv.CursorPosition);
  118. Assert.Empty (tv.Autocomplete.Suggestions);
  119. Assert.Equal (3, tv.Autocomplete.AllSuggestions.Count);
  120. Assert.False (tv.Autocomplete.Visible);
  121. top.Redraw (tv.Bounds);
  122. Assert.True (tv.ProcessKey (new KeyEvent (tv.Autocomplete.Reopen, new KeyModifiers ())));
  123. Assert.Equal ($"F Fortunately super feature.", tv.Text);
  124. Assert.Equal (new Point (1, 0), tv.CursorPosition);
  125. Assert.Equal (2, tv.Autocomplete.Suggestions.Count);
  126. Assert.Equal (3, tv.Autocomplete.AllSuggestions.Count);
  127. Assert.True (tv.ProcessKey (new KeyEvent (tv.Autocomplete.SelectionKey, new KeyModifiers ())));
  128. Assert.Equal ($"Fortunately Fortunately super feature.", tv.Text);
  129. Assert.Equal (new Point (11, 0), tv.CursorPosition);
  130. Assert.Equal (2, tv.Autocomplete.Suggestions.Count);
  131. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [0]);
  132. Assert.Equal ("feature", tv.Autocomplete.Suggestions [^1]);
  133. Assert.Equal (0, tv.Autocomplete.SelectedIdx);
  134. Assert.Equal ("Fortunately", tv.Autocomplete.Suggestions [tv.Autocomplete.SelectedIdx]);
  135. Assert.True (tv.ProcessKey (new KeyEvent (tv.Autocomplete.CloseKey, new KeyModifiers ())));
  136. Assert.Equal ($"Fortunately Fortunately super feature.", tv.Text);
  137. Assert.Equal (new Point (11, 0), tv.CursorPosition);
  138. Assert.Empty (tv.Autocomplete.Suggestions);
  139. Assert.Equal (3, tv.Autocomplete.AllSuggestions.Count);
  140. }
  141. }
  142. }