diff --git a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs index ecec9d30e..4408a4b57 100644 --- a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs +++ b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs @@ -103,6 +103,37 @@ public void WriteLine_Line_ShouldOnlyWriteLineTerminatorWhenLineIsNull() _channelSessionMock.Verify(p => p.SendData(lineTerminator), Times.Once); } + [TestMethod] + public void WindowChangeRequest_ShouldReturnFalseWhenNotConnected() + { + var shellStream = CreateShellStream(); + _channelSessionMock.Setup(s => s.IsOpen).Returns(false); + Assert.IsFalse(shellStream.ChangeWindow(80, 25, 0, 0)); + } + + [TestMethod] + public void WindowChangeRequest_ShouldReturnFalseWhenResultFails() + { + var shellStream = CreateShellStream(); + _channelSessionMock.Setup(s => s.IsOpen).Returns(true); + _channelSessionMock.Setup(s => s.SendWindowChangeRequest( + It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny())).Returns(false); + Assert.IsFalse(shellStream.ChangeWindow(80, 25, 0, 0)); + } + + [TestMethod] + public void WindowChangeRequest_ShouldReturnTrueWhenResultSucceeds() + { + var shellStream = CreateShellStream(); + _channelSessionMock.Setup(s => s.IsOpen).Returns(true); + _channelSessionMock.Setup(s => s.SendWindowChangeRequest( + It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny())).Returns(true); + Assert.IsTrue(shellStream.ChangeWindow(80, 25, 0, 0)); + _channelSessionMock.Verify(v => v.SendWindowChangeRequest(80,25,0,0), Times.Once()); + } + private ShellStream CreateShellStream() { _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); diff --git a/src/Renci.SshNet/ShellStream.cs b/src/Renci.SshNet/ShellStream.cs index 3274fe19c..720f1ccc8 100644 --- a/src/Renci.SshNet/ShellStream.cs +++ b/src/Renci.SshNet/ShellStream.cs @@ -7,6 +7,8 @@ using System.Threading; using System.Text.RegularExpressions; using Renci.SshNet.Abstractions; +using System.CodeDom; +using System.Runtime.InteropServices; namespace Renci.SshNet { @@ -52,6 +54,19 @@ public bool DataAvailable } } } + /// + /// Sends a Window Change Request via the Channel. + /// + /// New screen width in # of columns + /// New screen height in # of rows + /// New screen width in Pixels + /// New screen height in Pixels + /// true when change is successful, or false when channel is NOT open or the request + public bool ChangeWindow(uint columns, uint rows, uint width, uint height ) + { + if (_channel==null || !_channel.IsOpen) return false; + return _channel.SendWindowChangeRequest(columns, rows, width, height); + } /// /// Gets the number of bytes that will be written to the internal buffer.