From cfd065dff88b8ebc8df7712a44110bb76c6d3541 Mon Sep 17 00:00:00 2001 From: Brian Rogers Date: Thu, 6 Dec 2018 19:50:46 -0800 Subject: [PATCH] TextConsole - WriteAfterDispose --- core/src/TextConsole.cs | 10 ++++++---- core/test/TextConsoleTest.cs | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/core/src/TextConsole.cs b/core/src/TextConsole.cs index 2057ef2..b69b993 100644 --- a/core/src/TextConsole.cs +++ b/core/src/TextConsole.cs @@ -10,18 +10,20 @@ namespace Adventure public sealed class TextConsole : IDisposable { private readonly MessageBus bus; - private readonly IDisposable sub; + private readonly IDisposable inputSub; + private readonly IDisposable outputSub; public TextConsole(MessageBus bus, TextReader reader, TextWriter writer) { this.bus = bus; - this.sub = this.bus.Subscribe(_ => this.ReadLine(reader)); - this.bus.Subscribe(m => writer.WriteLine(m.Text)); + this.inputSub = this.bus.Subscribe(_ => this.ReadLine(reader)); + this.outputSub = this.bus.Subscribe(m => writer.WriteLine(m.Text)); } public void Dispose() { - this.sub.Dispose(); + this.inputSub.Dispose(); + this.outputSub.Dispose(); } private void ReadLine(TextReader reader) diff --git a/core/test/TextConsoleTest.cs b/core/test/TextConsoleTest.cs index 9add45e..cda9ec7 100644 --- a/core/test/TextConsoleTest.cs +++ b/core/test/TextConsoleTest.cs @@ -83,5 +83,22 @@ public void WriteTwoLines() sb.ToString().Should().Be("one" + Environment.NewLine + "two" + Environment.NewLine); } } + + [Fact] + public void WriteAfterDispose() + { + MessageBus bus = new MessageBus(); + StringBuilder sb = new StringBuilder(); + using (StringWriter writer = new StringWriter(sb)) + { + using (TextConsole console = new TextConsole(bus, TextReader.Null, writer)) + { + } + + bus.Send(new OutputMessage("one")); + + sb.ToString().Should().BeEmpty(); + } + } } }