Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions src/Spectre.Console.Ansi.Tests/AnsiWriterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4D");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Steps()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorLeft(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorBackward
Expand All @@ -93,6 +106,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4D");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Steps()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorBackward(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorRight
Expand All @@ -109,6 +135,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4C");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Steps()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorRight(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorForward
Expand All @@ -125,6 +164,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4C");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Steps()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorForward(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorDown
Expand All @@ -141,6 +193,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4B");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Steps()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorDown(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorUp
Expand All @@ -157,6 +222,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4A");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Steps()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorUp(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorPosition
Expand Down Expand Up @@ -391,6 +469,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4Z");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Tabs()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorBackwardTabulation(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorHorizontalTabulation
Expand All @@ -407,6 +498,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4I");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Tabs()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorHorizontalTabulation(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorNextLine
Expand All @@ -423,6 +527,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4E");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Lines()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorNextLine(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class CursorPreviousLine
Expand All @@ -439,6 +556,19 @@ public void Should_Write_Correct_Ansi()
// Then
fixture.Output.ShouldBe("\e[4F");
}

[Fact]
public void Should_Not_Write_Ansi_For_Zero_Lines()
{
// Given
var fixture = new AnsiFixture();

// When
fixture.Writer.CursorPreviousLine(0);

// Then
fixture.Output.ShouldBeEmpty();
}
}

public sealed class Index
Expand Down
40 changes: 40 additions & 0 deletions src/Spectre.Console.Ansi/AnsiWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,11 @@ public AnsiWriter CursorHome()
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorUp(int steps)
{
if (steps == 0)
{
return this;
}

return WriteCsi(steps, 'A');
}

Expand All @@ -367,6 +372,11 @@ public AnsiWriter CursorUp(int steps)
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorDown(int steps)
{
if (steps == 0)
{
return this;
}

return WriteCsi(steps, 'B');
}

Expand Down Expand Up @@ -397,6 +407,11 @@ public AnsiWriter CursorRight(int steps)
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorForward(int steps)
{
if (steps == 0)
{
return this;
}

return WriteCsi(steps, 'C');
}

Expand Down Expand Up @@ -427,6 +442,11 @@ public AnsiWriter CursorLeft(int steps)
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorBackward(int steps)
{
if (steps == 0)
{
return this;
}

return WriteCsi(steps, 'D');
}

Expand Down Expand Up @@ -607,6 +627,11 @@ public AnsiWriter ClearScrollback()
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorBackwardTabulation(int tabs = 1)
{
if (tabs == 0)
{
return this;
}

return WriteCsi(tabs, 'Z');
}

Expand All @@ -621,6 +646,11 @@ public AnsiWriter CursorBackwardTabulation(int tabs = 1)
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorHorizontalTabulation(int tabs = 1)
{
if (tabs == 0)
{
return this;
}

return WriteCsi(tabs, 'I');
}

Expand All @@ -635,6 +665,11 @@ public AnsiWriter CursorHorizontalTabulation(int tabs = 1)
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorNextLine(int lines = 1)
{
if (lines == 0)
{
return this;
}

return WriteCsi(lines, 'E');
}

Expand All @@ -649,6 +684,11 @@ public AnsiWriter CursorNextLine(int lines = 1)
/// <returns>The same instance so that multiple calls can be chained.</returns>
public AnsiWriter CursorPreviousLine(int lines = 1)
{
if (lines == 0)
{
return this;
}

return WriteCsi(lines, 'F');
}

Expand Down