Skip to content

Commit 3e2eea7

Browse files
patriksvenssonphil-scott-78
authored andcommitted
Add output abstraction and reorganize profile
* Moves ColorSystem from Profile to Capabilities * Renames Tty to IsTerminal * Adds IAnsiConsoleOutput to make output more flexible Closes spectreconsole#343 Closes spectreconsole#359 Closes spectreconsole#369
1 parent bc9f610 commit 3e2eea7

27 files changed

+194
-139
lines changed

examples/Console/Colors/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public static void Main()
77
/////////////////////////////////////////////////////////////////
88
// No colors
99
/////////////////////////////////////////////////////////////////
10-
if (AnsiConsole.Profile.ColorSystem == ColorSystem.NoColors)
10+
if (AnsiConsole.Profile.Capabilities.ColorSystem == ColorSystem.NoColors)
1111
{
1212
AnsiConsole.WriteLine("No colors are supported.");
1313
return;

examples/Console/Info/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ public static void Main()
88
.AddColumn(new GridColumn().NoWrap().PadRight(4))
99
.AddColumn()
1010
.AddRow("[b]Enrichers[/]", string.Join(", ", AnsiConsole.Profile.Enrichers))
11-
.AddRow("[b]Color system[/]", $"{AnsiConsole.Profile.ColorSystem}")
11+
.AddRow("[b]Color system[/]", $"{AnsiConsole.Profile.Capabilities.ColorSystem}")
1212
.AddRow("[b]Unicode?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Unicode)}")
1313
.AddRow("[b]Supports ansi?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Ansi)}")
1414
.AddRow("[b]Supports links?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Links)}")
1515
.AddRow("[b]Legacy console?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Legacy)}")
1616
.AddRow("[b]Interactive?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Interactive)}")
17-
.AddRow("[b]TTY?[/]", $"{YesNo(AnsiConsole.Profile.Capabilities.Tty)}")
17+
.AddRow("[b]Terminal?[/]", $"{YesNo(AnsiConsole.Profile.Out.IsTerminal)}")
1818
.AddRow("[b]Buffer width[/]", $"{AnsiConsole.Console.Profile.Width}")
1919
.AddRow("[b]Buffer height[/]", $"{AnsiConsole.Console.Profile.Height}")
2020
.AddRow("[b]Encoding[/]", $"{AnsiConsole.Console.Profile.Encoding.EncodingName}");

src/Spectre.Console.Testing/Fakes/FakeAnsiConsole.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public FakeAnsiConsole(
3333
{
3434
Ansi = ansi,
3535
ColorSystem = (ColorSystemSupport)colors,
36-
Out = _writer,
36+
Out = new AnsiConsoleOutput(_writer),
3737
Enrichment = new ProfileEnrichment
3838
{
3939
UseDefaultEnrichers = false,

src/Spectre.Console.Testing/Fakes/FakeCapabilities.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ namespace Spectre.Console.Testing
22
{
33
public sealed class FakeCapabilities : IReadOnlyCapabilities
44
{
5+
public ColorSystem ColorSystem { get; set; } = ColorSystem.TrueColor;
6+
57
public bool Ansi { get; set; }
68

79
public bool Links { get; set; }
810

911
public bool Legacy { get; set; }
1012

11-
public bool Tty { get; set; }
13+
public bool IsTerminal { get; set; }
1214

1315
public bool Interactive { get; set; }
1416

src/Spectre.Console.Testing/Fakes/FakeConsole.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public sealed class FakeConsole : IAnsiConsole, IDisposable
1616
public RenderPipeline Pipeline { get; }
1717

1818
public FakeConsoleInput Input { get; }
19-
public string Output => Profile.Out.ToString();
19+
public string Output => Profile.Out.Writer.ToString();
2020
public IReadOnlyList<string> Lines => Output.TrimEnd('\n').Split(new char[] { '\n' });
2121

2222
public FakeConsole(
@@ -28,10 +28,10 @@ public FakeConsole(
2828
ExclusivityMode = new FakeExclusivityMode();
2929
Pipeline = new RenderPipeline();
3030

31-
Profile = new Profile(new StringWriter(), encoding ?? Encoding.UTF8);
31+
Profile = new Profile(new AnsiConsoleOutput(new StringWriter()), encoding ?? Encoding.UTF8);
3232
Profile.Width = width;
3333
Profile.Height = height;
34-
Profile.ColorSystem = colorSystem;
34+
Profile.Capabilities.ColorSystem = colorSystem;
3535
Profile.Capabilities.Ansi = supportsAnsi;
3636
Profile.Capabilities.Legacy = legacyConsole;
3737
Profile.Capabilities.Interactive = interactive;
@@ -41,7 +41,7 @@ public FakeConsole(
4141

4242
public void Dispose()
4343
{
44-
Profile.Out.Dispose();
44+
Profile.Out.Writer.Dispose();
4545
}
4646

4747
public void Clear(bool home)
@@ -52,7 +52,7 @@ public void Write(IRenderable renderable)
5252
{
5353
foreach (var segment in renderable.GetSegments(this))
5454
{
55-
Profile.Out.Write(segment.Text);
55+
Profile.Out.Writer.Write(segment.Text);
5656
}
5757
}
5858

src/Spectre.Console.Tests/Unit/AnsiConsoleTests.Colors.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ public void Should_Create_Console_With_Requested_ColorSystem(ColorSystemSupport
1919
var console = AnsiConsole.Create(new AnsiConsoleSettings
2020
{
2121
ColorSystem = requested,
22-
Out = new StringWriter(),
22+
Out = new AnsiConsoleOutput(new StringWriter()),
2323
});
2424

2525
// Then
26-
console.Profile.ColorSystem.ShouldBe(expected);
26+
console.Profile.Capabilities.ColorSystem.ShouldBe(expected);
2727
}
2828

2929
public sealed class TrueColor

src/Spectre.Console.Tests/Unit/Progress/ProgressColumnFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public ProgressColumnFixture(double completed, double total)
2020
public string Render()
2121
{
2222
var console = new FakeConsole();
23-
var context = new RenderContext(console.Profile.ColorSystem, console.Profile.Capabilities);
23+
var context = new RenderContext(console.Profile.Capabilities);
2424
console.Write(Column.Render(context, Task, TimeSpan.Zero));
2525
return console.Output;
2626
}

src/Spectre.Console.Tests/Unit/RuleTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ public Task Should_Truncate_Title()
130130
}
131131

132132
[Theory]
133-
[InlineData(0, "Hello World Hello World Hello World Hello World Hello World", "")]
134133
[InlineData(1, "Hello World Hello World Hello World Hello World Hello World", "─")]
135134
[InlineData(2, "Hello World Hello World Hello World Hello World Hello World", "──")]
136135
[InlineData(3, "Hello World Hello World Hello World Hello World Hello World", "───")]

src/Spectre.Console.Tests/Unit/TextTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public void Should_Consider_The_Longest_Word_As_Minimum_Width()
1515
var text = new Text("Foo Bar Baz\nQux\nLol mobile");
1616

1717
// When
18-
var result = ((IRenderable)text).Measure(new RenderContext(ColorSystem.TrueColor, caps), 80);
18+
var result = ((IRenderable)text).Measure(new RenderContext(caps), 80);
1919

2020
// Then
2121
result.Min.ShouldBe(6);
@@ -29,7 +29,7 @@ public void Should_Consider_The_Longest_Line_As_Maximum_Width()
2929
var text = new Text("Foo Bar Baz\nQux\nLol mobile");
3030

3131
// When
32-
var result = ((IRenderable)text).Measure(new RenderContext(ColorSystem.TrueColor, caps), 80);
32+
var result = ((IRenderable)text).Measure(new RenderContext(caps), 80);
3333

3434
// Then
3535
result.Max.ShouldBe(11);

src/Spectre.Console/AnsiConsole.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static partial class AnsiConsole
1515
{
1616
Ansi = AnsiSupport.Detect,
1717
ColorSystem = ColorSystemSupport.Detect,
18-
Out = System.Console.Out,
18+
Out = new AnsiConsoleOutput(System.Console.Out),
1919
});
2020

2121
Created = true;

0 commit comments

Comments
 (0)