public void RenderChartTestCommon(XYChartOptions options, int w = 80, int h = 30) { var app = new CliTestHarness(this.TestContext, w, h, true); app.QueueAction(() => app.LayoutRoot.Add(new XYChart(options)).Fill()); app.QueueAction(async() => { await app.Paint().AsAwaitable(); app.RecordKeyFrame(); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void ShowTextInput() { var app = new CliTestHarness(this.TestContext, 80, 20, true); app.QueueAction(async() => { Promise <ConsoleString> dialogPromise; dialogPromise = Dialog.ShowRichTextInput(new RichTextDialogOptions() { Message = "Rich text input prompt text".ToGreen(), }); await app.PaintAndRecordKeyFrameAsync(); Assert.IsFalse(dialogPromise.IsFulfilled); app.SendKey(new ConsoleKeyInfo('A', ConsoleKey.A, false, false, false)); await app.PaintAndRecordKeyFrameAsync(); app.SendKey(new ConsoleKeyInfo('d', ConsoleKey.D, false, false, false)); await app.PaintAndRecordKeyFrameAsync(); app.SendKey(new ConsoleKeyInfo('a', ConsoleKey.A, false, false, false)); await app.PaintAndRecordKeyFrameAsync(); app.SendKey(new ConsoleKeyInfo('m', ConsoleKey.M, false, false, false)); await app.PaintAndRecordKeyFrameAsync(); Assert.IsFalse(dialogPromise.IsFulfilled); app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.Enter, false, false, false)); var stringVal = (await dialogPromise.AsAwaitable()).ToString(); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.AreEqual("Adam", stringVal); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void ShowEnumOptions() { var app = new CliTestHarness(this.TestContext, 80, 20, true); app.QueueAction(async() => { Promise <ConsoleColor?> dialogPromise; dialogPromise = Dialog.ShowEnumOptions <ConsoleColor>("Enum option picker".ToGreen()); await app.PaintAndRecordKeyFrameAsync(); Assert.IsFalse(dialogPromise.IsFulfilled); for (var i = 0; i < 6; i++) { app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.DownArrow, false, false, false)); await app.PaintAndRecordKeyFrameAsync(); } app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.Enter, false, false, false)); await app.PaintAndRecordKeyFrameAsync(); var enumValue = (await dialogPromise.AsAwaitable()); Assert.AreEqual(ConsoleColor.DarkGreen, enumValue); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void ShowMessageBasicString() { var app = new CliTestHarness(this.TestContext, 80, 20, true); app.QueueAction(async() => { Promise dialogPromise; // show hello world message, wait for a paint, then take a keyframe of the screen, which // should have the dialog shown dialogPromise = Dialog.ShowMessage("Hello world"); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsFalse(dialogPromise.IsFulfilled); // simulate an enter keypress, which should clear the dialog app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.Enter, false, false, false)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsTrue(dialogPromise.IsFulfilled); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void TestPlaybackEndToEnd() { int w = 10, h = 1; var temp = Path.GetTempFileName(); using (var stream = File.OpenWrite(temp)) { var writer = new ConsoleBitmapStreamWriter(stream) { CloseInnerStream = false }; var bitmap = new ConsoleBitmap(w, h); for (var i = 0; i < bitmap.Width; i++) { bitmap.Pen = new ConsoleCharacter(' '); bitmap.FillRect(0, 0, bitmap.Width, bitmap.Height); bitmap.Pen = new ConsoleCharacter(' ', backgroundColor: ConsoleColor.Red); bitmap.DrawPoint(i, 0); writer.WriteFrame(bitmap, true, TimeSpan.FromSeconds(.5 * i)); } writer.Dispose(); } var app = new CliTestHarness(this.TestContext, 80, 30); app.QueueAction(() => { var player = app.LayoutRoot.Add(new ConsoleBitmapPlayer()).Fill(); player.Load(File.OpenRead(temp)); app.SetTimeout(() => app.SendKey(new ConsoleKeyInfo('p', ConsoleKey.P, false, false, false)), TimeSpan.FromMilliseconds(100)); var playStarted = false; player.SubscribeForLifetime(nameof(player.State), () => { if (player.State == PlayerState.Playing) { playStarted = true; } else if (player.State == PlayerState.Stopped && playStarted) { app.Stop(); } }, app); }); app.Start().Wait(); Thread.Sleep(100); app.AssertThisTestMatchesLKGFirstAndLastFrame(); }
public void ShowYesConfirmation() { var app = new CliTestHarness(this.TestContext, 80, 20, true); app.QueueAction(async() => { Promise dialogPromise; dialogPromise = Dialog.ShowYesConfirmation("Yes or no, no will be clicked"); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsFalse(dialogPromise.IsFulfilled); var noRejected = false; dialogPromise.Fail((ex) => noRejected = true); // simulate an enter keypress, which should clear the dialog, but should not trigger // the promise to resolve since yes was not chosen app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.Enter, false, false, false)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsTrue(dialogPromise.IsFulfilled); Assert.IsTrue(noRejected); // the promise should reject on no dialogPromise = Dialog.ShowYesConfirmation("Yes or no, yes will be clicked"); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsFalse(dialogPromise.IsFulfilled); // give focus to the yes option app.SendKey(new ConsoleKeyInfo('\t', ConsoleKey.Tab, true, false, false)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); // dismiss the dialog app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.Enter, false, false, false)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsTrue(dialogPromise.IsFulfilled); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void TestRenderTextBox() { var app = new CliTestHarness(this.TestContext, 8, 1); app.QueueAction(() => { app.LayoutRoot.Add(new TextBox() { Value = "SomeText".ToWhite() }).Fill(); app.Stop(); }); app.Start().Wait(); Assert.IsTrue(app.Find("SomeText".ToWhite()).HasValue); app.AssertThisTestMatchesLKG(); }
public async Task TestNormalizedProximity() { var app = new CliTestHarness(TestContext, 0, 0, 40, 40, true); app.QueueAction(async() => { var a = app.LayoutRoot.Add(new ConsoleControl() { Background = ConsoleColor.Red, Width = 1, Height = 1, X = 0, Y = 0 }); var b = app.LayoutRoot.Add(new ConsoleControl() { Background = ConsoleColor.Green, Width = 1, Height = 1, X = 39, Y = 39 }); var d = Geometry.CalculateNormalizedDistanceTo(a, b); Console.WriteLine(d); await app.PaintAndRecordKeyFrameAsync(); app.Stop(); }); await app.Start().AsAwaitable(); app.AssertThisTestMatchesLKG(); }
public void DrawLines() { var bitmap = new ConsoleBitmap(80, 30); var centerX = bitmap.Width / 2; var centerY = bitmap.Height / 2; var app = new CliTestHarness(TestContext, bitmap.Width, bitmap.Height, true); app.QueueAction(async() => { app.LayoutRoot.Add(new BitmapControl() { Bitmap = bitmap }).Fill(); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Gray); bitmap.DrawLine(centerX, centerY, 0, centerY / 2); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Red); bitmap.DrawLine(centerX, centerY, 0, 0); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Yellow); bitmap.DrawLine(centerX, centerY, centerX / 2, 0); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Green); bitmap.DrawLine(centerX, centerY, centerX, 0); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Magenta); bitmap.DrawLine(centerX, centerY, (int)(bitmap.Width * .75), 0); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Cyan); bitmap.DrawLine(centerX, centerY, bitmap.Width - 1, 0); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Gray); bitmap.DrawLine(centerX, centerY, bitmap.Width - 1, centerY / 2); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.White); bitmap.DrawLine(centerX, centerY, 0, bitmap.Height / 2); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Blue); bitmap.DrawLine(centerX, centerY, bitmap.Width - 1, bitmap.Height / 2); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Gray); bitmap.DrawLine(centerX, centerY, 0, (int)(bitmap.Height * .75)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Red); bitmap.DrawLine(centerX, centerY, 0, bitmap.Height - 1); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Yellow); bitmap.DrawLine(centerX, centerY, centerX / 2, bitmap.Height - 1); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Green); bitmap.DrawLine(centerX, centerY, centerX, bitmap.Height - 1); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Magenta); bitmap.DrawLine(centerX, centerY, (int)(bitmap.Width * .75), bitmap.Height - 1); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Cyan); bitmap.DrawLine(centerX, centerY, bitmap.Width - 1, bitmap.Height - 1); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); bitmap.Pen = new ConsoleCharacter('X', ConsoleColor.Gray); bitmap.DrawLine(centerX, centerY, bitmap.Width - 1, (int)(bitmap.Height * .75)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void TestDataGridBasic() { var items = new List <Item>(); for (var i = 0; i < 100; i++) { items.Add(new Item() { Bar = "Bar" + i, Foo = "Foo" + i, }); } var app = new CliTestHarness(TestContext, 80, 20, true) { SecondsBetweenKeyframes = .05 }; var dataGrid = new ListGrid <Item>(new ListGridOptions <Item>() { DataSource = new SyncList <Item>(items), Columns = new List <ListGridColumnDefinition <Item> >() { new ListGridColumnDefinition <Item>() { Header = "Foo".ToGreen(), Width = .5, Type = GridValueType.Percentage, Formatter = (item) => new Label() { Text = item.Foo.ToConsoleString() } }, new ListGridColumnDefinition <Item>() { Header = "Bar".ToRed(), Width = .5, Type = GridValueType.Percentage, Formatter = (item) => new Label() { Text = item.Bar.ToConsoleString() } } } }); app.QueueAction(async() => { var selectionLabel = app.LayoutRoot.Add(new Label() { Text = "DEFAULT".ToConsoleString(), Height = 1 }).CenterHorizontally(); selectionLabel.Text = $"SelectedRowIndex: {dataGrid.SelectedRowIndex}, SelectedCellIndex: {dataGrid.SelectedColumnIndex}".ToConsoleString(); dataGrid.SelectionChanged.SubscribeForLifetime(() => { selectionLabel.Text = $"SelectedRowIndex: {dataGrid.SelectedRowIndex}, SelectedCellIndex: {dataGrid.SelectedColumnIndex}".ToConsoleString(); }, dataGrid); app.LayoutRoot.Add(dataGrid).Fill(padding: new Thickness(0, 0, 1, 0)); await app.PaintAndRecordKeyFrameAsync(); for (var i = 0; i < items.Count - 1; i++) { await app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.DownArrow, false, false, false)).AsAwaitable(); await app.PaintAndRecordKeyFrameAsync(); } for (var i = 0; i < items.Count - 1; i++) { await app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.UpArrow, false, false, false)).AsAwaitable(); await app.PaintAndRecordKeyFrameAsync(); } app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void GridLayoutEndToEnd() { var app = new CliTestHarness(this.TestContext, 80, 20, true); var gridLayout = app.LayoutRoot.Add(new GridLayout(new GridLayoutOptions() { Columns = new List <GridColumnDefinition>() { new GridColumnDefinition() { Width = 5, Type = GridValueType.Pixels }, new GridColumnDefinition() { Width = 2, Type = GridValueType.RemainderValue }, new GridColumnDefinition() { Width = 2, Type = GridValueType.RemainderValue }, }, Rows = new List <GridRowDefinition>() { new GridRowDefinition() { Height = 1, Type = GridValueType.Pixels }, new GridRowDefinition() { Height = 2, Type = GridValueType.RemainderValue }, new GridRowDefinition() { Height = 1, Type = GridValueType.Pixels }, } })).Fill(); var colorWheel = new List <ConsoleColor>() { ConsoleColor.Red, ConsoleColor.DarkRed, ConsoleColor.Red, ConsoleColor.Black, ConsoleColor.White, ConsoleColor.Black, ConsoleColor.Green, ConsoleColor.DarkGreen, ConsoleColor.Green }; var colorIndex = 0; for (var y = 0; y < gridLayout.NumRows; y++) { for (var x = 0; x < gridLayout.NumColumns; x++) { gridLayout.Add(new ConsoleControl() { Background = colorWheel[colorIndex], }, x, y); colorIndex = colorIndex == colorWheel.Count - 1 ? 0 : colorIndex + 1; } } app.QueueAction(async() => { await app.Paint().AsAwaitable(); app.RecordKeyFrame(); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }