Files
Terminal.Gui/UnitTests/ListViewTests.cs
BDisp 1557f7a71e Fixes ComboBox text and list if the height is equal to one. (#1606)
* Fixes ComboBox text and list if the height is equal to one. End and Home navigate on text.

* Trying fix the all scenarios unit test.

* Removing unnecessary code.

* Avoiding the Collection was modified after the enumerator was instantiated exception.

* Also cover the IndexOfValue inside the lock.

* Disposing the DrawContent event.

* Increasing the time to test.

* Revert "Increasing the time to test."

This reverts commit b3c2ac871c.

* CharacterMap take more time to load.
2022-02-20 13:39:22 -08:00

135 lines
4.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;
namespace Terminal.Gui.Views {
public class ListViewTests {
[Fact]
public void Constructors_Defaults ()
{
var lv = new ListView ();
Assert.Null (lv.Source);
Assert.True (lv.CanFocus);
lv = new ListView (new List<string> () { "One", "Two", "Three" });
Assert.NotNull (lv.Source);
lv = new ListView (new NewListDataSource ());
Assert.NotNull (lv.Source);
lv = new ListView (new Rect (0, 1, 10, 20), new List<string> () { "One", "Two", "Three" });
Assert.NotNull (lv.Source);
Assert.Equal (new Rect (0, 1, 10, 20), lv.Frame);
lv = new ListView (new Rect (0, 1, 10, 20), new NewListDataSource ());
Assert.NotNull (lv.Source);
Assert.Equal (new Rect (0, 1, 10, 20), lv.Frame);
}
private class NewListDataSource : IListDataSource {
public int Count => throw new NotImplementedException ();
public int Length => throw new NotImplementedException ();
public bool IsMarked (int item)
{
throw new NotImplementedException ();
}
public void Render (ListView container, ConsoleDriver driver, bool selected, int item, int col, int line, int width, int start = 0)
{
throw new NotImplementedException ();
}
public void SetMark (int item, bool value)
{
throw new NotImplementedException ();
}
public IList ToList ()
{
throw new NotImplementedException ();
}
}
[Fact]
public void KeyBindings_Command ()
{
List<string> source = new List<string> () { "One", "Two", "Three" };
ListView lv = new ListView (source) { Height = 2, AllowsMarking = true };
Assert.Equal (0, lv.SelectedItem);
Assert.True (lv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
Assert.Equal (1, lv.SelectedItem);
Assert.True (lv.ProcessKey (new KeyEvent (Key.CursorUp, new KeyModifiers ())));
Assert.Equal (0, lv.SelectedItem);
Assert.True (lv.ProcessKey (new KeyEvent (Key.PageDown, new KeyModifiers ())));
Assert.Equal (2, lv.SelectedItem);
Assert.Equal (2, lv.TopItem);
Assert.True (lv.ProcessKey (new KeyEvent (Key.PageUp, new KeyModifiers ())));
Assert.Equal (0, lv.SelectedItem);
Assert.Equal (0, lv.TopItem);
Assert.False (lv.Source.IsMarked (lv.SelectedItem));
Assert.True (lv.ProcessKey (new KeyEvent (Key.Space, new KeyModifiers ())));
Assert.True (lv.Source.IsMarked (lv.SelectedItem));
var opened = false;
lv.OpenSelectedItem += (_) => opened = true;
Assert.True (lv.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ())));
Assert.True (opened);
Assert.True (lv.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ())));
Assert.Equal (2, lv.SelectedItem);
Assert.True (lv.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ())));
Assert.Equal (0, lv.SelectedItem);
}
[Fact]
[AutoInitShutdown]
public void RowRender_Event ()
{
var rendered = false;
var source = new List<string> () { "one", "two", "three" };
var lv = new ListView () { Width = Dim.Fill (), Height = Dim.Fill () };
lv.RowRender += _ => rendered = true;
Application.Top.Add (lv);
Application.Begin (Application.Top);
Assert.False (rendered);
lv.SetSource (source);
lv.Redraw (lv.Bounds);
Assert.True (rendered);
}
[Fact]
[AutoInitShutdown]
public void EnsuresVisibilitySelectedItem_Top ()
{
var source = new List<string> () { "First", "Second" };
ListView lv = new ListView (source) { Width = Dim.Fill (), Height = 1 };
lv.SelectedItem = 1;
Application.Top.Add (lv);
Application.Begin (Application.Top);
Assert.Equal ("Second ", GetContents (0));
Assert.Equal (new (' ', 7), GetContents (1));
lv.MoveUp ();
lv.Redraw (lv.Bounds);
Assert.Equal ("First ", GetContents (0));
Assert.Equal (new (' ', 7), GetContents (1));
string GetContents (int line)
{
var item = "";
for (int i = 0; i < 7; i++) {
item += (char)Application.Driver.Contents [line, i, 0];
}
return item;
}
}
}
}