Add breakdown chart support

This also cleans up the bar chart code slightly and fixes
some minor bugs that were detected in related code.

Closes #244
This commit is contained in:
Patrik Svensson
2021-01-31 22:46:15 +01:00
committed by Patrik Svensson
parent 58400fe74e
commit b64e016e8c
32 changed files with 911 additions and 41 deletions

View File

@ -1,3 +1 @@
Greeting
Hello World
Hello World

View File

@ -0,0 +1,4 @@
Number of fruits
Apple 0
Orange █████████████████████████████████████████████████ 54
Banana ████████████████████████████ 33

View File

@ -0,0 +1,4 @@
████████████████████████████████████████████████████████████
■ SCSS 37 ■ HTML 28.3 ■ C# 22.6 ■ JavaScript 6
■ Ruby 6 ■ Shell 0.1

View File

@ -0,0 +1,3 @@
████████████████████████████████████████████████████████████
■ SCSS 37 ■ HTML 28,3 ■ C# 22,6 ■ JavaScript 6
■ Ruby 6 ■ Shell 0,1

View File

@ -0,0 +1,2 @@
████████████████████████████████████████████████████████████████████████████████
■ SCSS 37 ■ HTML 28.3 ■ C# 22.6 ■ JavaScript 6 ■ Ruby 6 ■ Shell 0.1

View File

@ -0,0 +1,4 @@
████████████████████████████████████████████████████████████
■ SCSS 37 ■ HTML 28.3 ■ C# 22.6 ■ JavaScript 6
■ Ruby 6 ■ Shell 0.1

View File

@ -0,0 +1,2 @@
████████████████████████████████████████████████████████████
■ SCSS ■ HTML ■ C# ■ JavaScript ■ Ruby ■ Shell

View File

@ -0,0 +1 @@
████████████████████████████████████████████████████████████

View File

@ -0,0 +1,3 @@
████████████████████████████████████████████████████████████
■ SCSS 37% ■ HTML 28.3% ■ C# 22.6% ■ JavaScript 6%
■ Ruby 6% ■ Shell 0.1%

View File

@ -0,0 +1,3 @@
████████████████████████████████████████████████████████████
■ SCSS 37 ■ HTML 28.3 ■ C# 22.6 ■ JavaScript 6
■ Ruby 6 ■ Shell 0.1

View File

@ -19,7 +19,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
<PackageReference Include="Shouldly" Version="4.0.3" />
<PackageReference Include="Spectre.Verify.Extensions" Version="0.1.0" />
<PackageReference Include="Spectre.Verify.Extensions" Version="0.3.0" />
<PackageReference Include="Verify.Xunit" Version="9.0.0-beta.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">

View File

@ -28,5 +28,24 @@ namespace Spectre.Console.Tests.Unit
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("Zero_Value")]
public async Task Should_Render_Correctly_2()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BarChart()
.Width(60)
.Label("Number of fruits")
.AddItem("Apple", 0)
.AddItem("Orange", 54)
.AddItem("Banana", 33));
// Then
await Verifier.Verify(console.Output);
}
}
}

View File

@ -0,0 +1,186 @@
using System.Threading.Tasks;
using Spectre.Console.Testing;
using Spectre.Verify.Extensions;
using VerifyXunit;
using Xunit;
namespace Spectre.Console.Tests.Unit
{
[UsesVerify]
[ExpectationPath("Widgets/BreakdownChart")]
public sealed class BreakdownChartTests
{
[Fact]
[Expectation("Default")]
public async Task Should_Render_Correctly()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BreakdownChart()
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("Width")]
public async Task Should_Render_With_Specific_Width()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BreakdownChart()
.Width(60)
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("ShowAsPercentages")]
public async Task Should_Render_Correctly_With_Specific_Width()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BreakdownChart()
.Width(60)
.ShowAsPercentages()
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("HideTags")]
public async Task Should_Render_Correctly_Without_Tags()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BreakdownChart()
.Width(60)
.HideTags()
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("HideTagValues")]
public async Task Should_Render_Correctly_Without_Tag_Values()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BreakdownChart()
.Width(60)
.HideTagValues()
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("Culture")]
public async Task Should_Render_Correctly_With_Specific_Culture()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BreakdownChart()
.Width(60)
.Culture("sv-SE")
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("FullSize")]
public async Task Should_Render_FullSize_Mode_Correctly()
{
// Given
var console = new FakeConsole(width: 80);
// When
console.Render(new BreakdownChart()
.Width(60)
.FullSize()
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
[Fact]
[Expectation("Ansi")]
public async Task Should_Render_Correct_Ansi()
{
// Given
var console = new FakeAnsiConsole(ColorSystem.EightBit, width: 80);
// When
console.Render(new BreakdownChart()
.Width(60)
.FullSize()
.AddItem("SCSS", 37, Color.Red)
.AddItem("HTML", 28.3, Color.Blue)
.AddItem("C#", 22.6, Color.Green)
.AddItem("JavaScript", 6, Color.Yellow)
.AddItem("Ruby", 6, Color.LightGreen)
.AddItem("Shell", 0.1, Color.Aqua));
// Then
await Verifier.Verify(console.Output);
}
}
}