public void CopyCharacters_AreaTooLarge_ClippedCorrectly() { Size size = new Size(4, 4); var mainBuffer = Enumerable.Repeat(cc, 16).ToArray(); char[] characters = { cc1, cc2, cc3, cc4, cc1, cc2, cc3, cc4, cc1, cc2, cc3, cc4, cc1, cc2, cc3, cc4, cc1, cc2, cc3, cc4, cc1, cc2, cc3, cc4, cc1 }; var expectedBuffer = new[] { cA, cB, cC, cD, cB, cC, cD, cA, cC, cD, cA, cB, cD, cA, cB, cC }; bool written = false, successful = false; using var stubbedApi = new StubbedNativeCalls(); stubbedApi.ReadConsoleOutputConsoleOutputHandleRectangle = (handle, rectangle) => { rectangle.Size.Should().Be(size); handle.Should().Be(stubbedApi.ScreenHandle); return(mainBuffer); }; stubbedApi.WriteConsoleOutputConsoleOutputHandleCHAR_INFOArrayRectangle = (handle, buffer, area) => { written = true; handle.Should().Be(stubbedApi.ScreenHandle); area.Size.Should().Be(size); buffer.Should().Equal(expectedBuffer); successful = true; }; var sut = new ConControls.Controls.Drawing.ConsoleGraphics(stubbedApi.ScreenHandle, stubbedApi, size, new ConControls.Controls.Drawing.FrameCharSets()); sut.CopyCharacters( background: background, foreColor: foreground, topLeft: Point.Empty, characters: characters, arraySize: new Size(5, 5)); written.Should().BeFalse(); mainBuffer.Should().Equal(expectedBuffer); sut.Flush(); written.Should().BeTrue(); successful.Should().BeTrue(); }
public void FillArea_CorrectArea_FilledCorrectly() { const char character = 'X'; Size size = new Size(4, 4); var mainBuffer = Enumerable.Repeat(cc, 16).ToArray(); CHAR_INFO c0 = new CHAR_INFO { Attributes = attributes, Char = character }; var expectedBuffer = new[] { cc, cc, cc, cc, cc, c0, c0, cc, cc, c0, c0, cc, cc, cc, cc, cc }; bool written = false, successful = false; using var stubbedApi = new StubbedNativeCalls(); stubbedApi.ReadConsoleOutputConsoleOutputHandleRectangle = (handle, rectangle) => { rectangle.Size.Should().Be(size); handle.Should().Be(stubbedApi.ScreenHandle); return(mainBuffer); }; stubbedApi.WriteConsoleOutputConsoleOutputHandleCHAR_INFOArrayRectangle = (handle, buffer, area) => { written = true; handle.Should().Be(stubbedApi.ScreenHandle); area.Size.Should().Be(size); buffer.Should().Equal(expectedBuffer); successful = true; }; var sut = new ConControls.Controls.Drawing.ConsoleGraphics(stubbedApi.ScreenHandle, stubbedApi, size, new ConControls.Controls.Drawing.FrameCharSets()); sut.FillArea( background: background, foreColor: foreground, c: character, area: new Rectangle(1, 1, 2, 2)); written.Should().BeFalse(); mainBuffer.Should().Equal(expectedBuffer); sut.Flush(); written.Should().BeTrue(); successful.Should().BeTrue(); }
public void DrawBackground_AreaTooLarge_ClippedCorrectly() { const char expectedCharacter = default; Size size = new Size(4, 4); var mainBuffer = Enumerable.Repeat(cc, 16).ToArray(); CHAR_INFO c0 = new CHAR_INFO { Attributes = background.ToBackgroundColor() | background.ToForegroundColor(), Char = expectedCharacter }; var expectedBuffer = Enumerable.Repeat(c0, 16).ToArray(); bool written = false, successful = false; using var stubbedApi = new StubbedNativeCalls(); stubbedApi.ReadConsoleOutputConsoleOutputHandleRectangle = (handle, rectangle) => { rectangle.Size.Should().Be(size); handle.Should().Be(stubbedApi.ScreenHandle); return(mainBuffer); }; stubbedApi.WriteConsoleOutputConsoleOutputHandleCHAR_INFOArrayRectangle = (handle, buffer, area) => { written = true; handle.Should().Be(stubbedApi.ScreenHandle); area.Size.Should().Be(size); buffer.Should().Equal(expectedBuffer); successful = true; }; var sut = new ConControls.Controls.Drawing.ConsoleGraphics(stubbedApi.ScreenHandle, stubbedApi, size, new ConControls.Controls.Drawing.FrameCharSets()); sut.DrawBackground( color: background, area: new Rectangle(-1, -1, 7, 7)); written.Should().BeFalse(); mainBuffer.Should().Equal(expectedBuffer); sut.Flush(); written.Should().BeTrue(); successful.Should().BeTrue(); }