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 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.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsFalse(dialogPromise.IsFulfilled); for (var i = 0; i < 6; i++) { app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.DownArrow, false, false, false)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); } app.SendKey(new ConsoleKeyInfo(' ', ConsoleKey.Enter, false, false, false)); await app.Paint().AsAwaitable(); app.RecordKeyFrame(); Assert.IsTrue(dialogPromise.IsFulfilled); var enumValue = (await dialogPromise.AsAwaitable()); Assert.AreEqual(ConsoleColor.DarkGreen, enumValue); 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 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 RenderChartTestCommon(XYChartOptions options, int w = 80, int h = 30) { var app = new CliTestHarness(this.TestContext, w, h, true); app.InvokeNextCycle(() => app.LayoutRoot.Add(new XYChart(options)).Fill()); app.InvokeNextCycle(async() => { await app.Paint(); app.RecordKeyFrame(); app.Stop(); }); app.Start().Wait(); app.AssertThisTestMatchesLKG(); }
public void TestMonthCalendarBasicRender() { var app = new CliTestHarness(this.TestContext, MonthCalendar.MinWidth, MonthCalendar.MinHeight, true); app.InvokeNextCycle(() => app.LayoutRoot.Add(new MonthCalendar(new MonthCalendarOptions() { Year = 2000, Month = 1 })).Fill()); app.InvokeNextCycle(async() => { await app.RequestPaintAsync(); app.RecordKeyFrame(); app.Stop(); }); app.Start().Wait(); 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 DrawLinesReverse() { 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.InvokeNextCycle(async() => { app.LayoutRoot.Add(new BitmapControl() { Bitmap = bitmap }).Fill(); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Gray), 0, centerY / 2, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Red), 0, 0, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Yellow), centerX / 2, 0, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Green), centerX, centerY, centerX, 0); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Magenta), (int)(bitmap.Width * .75), 0, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Cyan), bitmap.Width - 1, 0, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Gray), bitmap.Width - 1, centerY / 2, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.White), 0, bitmap.Height / 2, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Blue), bitmap.Width - 1, bitmap.Height / 2, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Gray), 0, (int)(bitmap.Height * .75), centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Red), 0, bitmap.Height - 1, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Yellow), centerX / 2, bitmap.Height - 1, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Green), centerX, bitmap.Height - 1, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Magenta), (int)(bitmap.Width * .75), bitmap.Height - 1, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Cyan), bitmap.Width - 1, bitmap.Height - 1, centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); bitmap.DrawLine(new ConsoleCharacter('X', ConsoleColor.Gray), bitmap.Width - 1, (int)(bitmap.Height * .75), centerX, centerY); await app.RequestPaintAsync(); app.RecordKeyFrame(); 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(); }
public static async Task Test(int w, int h, TestContext testContext, Func <CliTestHarness, SpaceTimePanel, Task> test) { Exception stEx = null; var app = new CliTestHarness(testContext, w, h, true); app.SecondsBetweenKeyframes = DefaultTimeIncrement.TotalSeconds; app.InvokeNextCycle(async() => { var d = new TaskCompletionSource <bool>(); var spaceTimePanel = app.LayoutRoot.Add(new SpaceTimePanel(app.LayoutRoot.Width, app.LayoutRoot.Height)); spaceTimePanel.SpaceTime.Increment = DefaultTimeIncrement; var stTask = spaceTimePanel.SpaceTime.Start(); var justUpdated = false; spaceTimePanel.AfterUpdate.SubscribeForLifetime(() => justUpdated = true, app); app.AfterPaint.SubscribeForLifetime(() => { if (justUpdated) { app.RecordKeyFrame(); justUpdated = false; } }, app); spaceTimePanel.SpaceTime.InvokeNextCycle(async() => { spaceTimePanel.RealTimeViewing.Enabled = false; try { await test(app, spaceTimePanel); } catch (Exception ex) { stEx = ex; } await app.Paint(); d.SetResult(true); }); await d.Task; try { await stTask; }catch (Exception exc) { spaceTimePanel.SpaceTime.Stop(); d.SetResult(true); stEx = exc; } await spaceTimePanel.SpaceTime.YieldAsync(); await app.PaintAndRecordKeyFrameAsync(); spaceTimePanel.SpaceTime.Stop(); await app.PaintAndRecordKeyFrameAsync(); app.Stop(); }); await app.Start(); if (stEx != null) { app.Abandon(); Assert.Fail(stEx.ToString()); } else { app.PromoteToLKG(); } }