public void SendNextLine_NonExistingTarget_ThrowsOutOfRangeException() { //arrange int target1 = 1; int target2 = 2; int target3 = 3; int badTarget = 4; //non-existing var dispenser = LineDispenserCreator.CreateLineDispenser(new StringWriter[] { _writers[0], _writers[1], _writers[2] }, KindOfTextData.Raw, false, null, null); //act dispenser.SendNextLine("first line to #1".ToExternalTuple(target1)); Action a = () => { dispenser.SendNextLine(string.Empty.ToExternalTuple(badTarget)); }; //assert a.Should().Throw <ArgumentOutOfRangeException>(); var writtenLines = WrittenLines(target1).ToList(); //first target writtenLines.Count().Should().Be(1); writtenLines[0].Should().Be("first line to #1"); writtenLines = WrittenLines(target2).ToList(); //second target writtenLines.Count().Should().Be(0); writtenLines = WrittenLines(target3).ToList(); //third target writtenLines.Count().Should().Be(0); }
public void Dispose_Call_MakesDispenserDisposed() { //arrange int target1 = 1; int target2 = 2; int target3 = 3; var dispenser = LineDispenserCreator.CreateLineDispenser(new StringWriter[] { _writers[0], _writers[1], _writers[2] }, KindOfTextData.Raw, false, null, null); //act dispenser.SendNextLine("first line to #1".ToExternalTuple(target1)); dispenser.SendNextLine(string.Empty.ToExternalTuple(target3)); dispenser.Dispose(); Action a = () => { dispenser.SendNextLine("second line to #1".ToExternalTuple(target1)); }; //assert a.Should().Throw <ObjectDisposedException>().WithMessage("Cannot write to a closed TextWriter."); a = () => { dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target2)); }; a.Should().Throw <ObjectDisposedException>().WithMessage("Cannot write to a closed TextWriter."); a = () => { dispenser.SendNextLine("second line to #3".ToExternalTuple(target3)); }; a.Should().Throw <ObjectDisposedException>().WithMessage("Cannot write to a closed TextWriter."); var writtenLines = WrittenLines(target1).ToList(); //first target writtenLines.Count().Should().Be(1); writtenLines[0].Should().Be("first line to #1"); writtenLines = WrittenLines(target2).ToList(); //second target writtenLines.Count().Should().Be(0); writtenLines = WrittenLines(target3).ToList(); //third target writtenLines.Count().Should().Be(1); writtenLines[0].Should().Be(string.Empty); }
public void SendNextLine_NotAllTargetsUsed_CorrectDataWritten() { //arrange int target1 = 1; int target2 = 2; int target3 = 3; var dispenser = LineDispenserCreator.CreateLineDispenser(new StringWriter[] { _writers[0], _writers[1], _writers[2] }, KindOfTextData.Raw, false, null, null); //act dispenser.SendNextLine("first line to #1".ToExternalTuple(target1)); dispenser.SendNextLine(string.Empty.ToExternalTuple(target1)); dispenser.SendNextLine("third line to #1".ToExternalTuple(target1)); dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target2)); dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target1)); //assert var writtenLines = WrittenLines(target1).ToList(); //first target writtenLines.Count().Should().Be(4); writtenLines[0].Should().Be("first line to #1"); writtenLines[1].Should().Be(string.Empty); writtenLines[2].Should().Be("third line to #1"); writtenLines[3].Should().Be(string.Empty); writtenLines = WrittenLines(target2).ToList(); //second target writtenLines.Count().Should().Be(1); writtenLines[0].Should().Be(string.Empty); writtenLines = WrittenLines(target3).ToList(); //third target writtenLines.Count().Should().Be(0); }
public void SendNextLine_SegmentsTo2X12Targets_CorrectDataWritten() { //arrange int target1 = 1; int target2 = 2; var dispenser = LineDispenserCreator.CreateLineDispenser(new StringWriter[] { _writers[0], _writers[1], _writers[2] }, KindOfTextData.X12, false, new Lazy <string>(() => "~"), null); //act dispenser.SendNextLine("first segment to #2".ToExternalTuple(target2)); dispenser.SendNextLine("first segment to #1".ToExternalTuple(target1)); dispenser.SendNextLine(string.Empty.ToExternalTuple(target1)); dispenser.SendNextLine("third segment to #1".ToExternalTuple(target1)); dispenser.SendNextLine("second segment to #2".ToExternalTuple(target2)); dispenser.SendNextLine("third segment to #2".ToExternalTuple(target2)); dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target1)); dispenser.SendNextLine("fourth segment to #2".ToExternalTuple(target2)); dispenser.SendNextLine(null); //end-of-data - this null is not forwarded to any target //assert var writtenLines = WrittenLines(target1).ToList(); //first target writtenLines.Count().Should().Be(1); //all segments in a single line writtenLines[0].Should().Be("first segment to #1~~third segment to #1~~"); writtenLines = WrittenLines(target2).ToList(); //second target writtenLines.Count().Should().Be(1); //all segments in a single line writtenLines[0].Should().Be("first segment to #2~second segment to #2~third segment to #2~fourth segment to #2~"); }
public void SendNextLine_2LinesToSingleTarget_CorrectDataWritten() { //arrange int target1 = 1; var dispenser = LineDispenserCreator.CreateLineDispenser(Enumerable.Repeat(_writers[0], 1), KindOfTextData.Raw, false, null, null); //only the first of the 3 writers is used in this test //act dispenser.SendNextLine("first line".ToExternalTuple(target1)); dispenser.SendNextLine("second line".ToExternalTuple(target1)); //assert var writtenLines = WrittenLines(target1).ToList(); writtenLines.Count().Should().Be(2); writtenLines[0].Should().Be("first line"); writtenLines[1].Should().Be("second line"); }
public void SendNextLine_VariousLinesToManyTargets_CorrectDataWritten() { //arrange int target1 = 1; int target2 = 2; int target3 = 3; var dispenser = LineDispenserCreator.CreateLineDispenser(new StringWriter[] { _writers[0], _writers[1], _writers[2] }, KindOfTextData.Raw, false, null, null); //act dispenser.SendNextLine("first line to #3".ToExternalTuple(target3)); dispenser.SendNextLine("first line to #1".ToExternalTuple(target1)); dispenser.SendNextLine(string.Empty.ToExternalTuple(target1)); dispenser.SendNextLine("third line to #1".ToExternalTuple(target1)); dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target2)); dispenser.SendNextLine("second line to #2".ToExternalTuple(target2)); dispenser.SendNextLine("third line to #2".ToExternalTuple(target2)); dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target1)); dispenser.SendNextLine("fourth line to #2".ToExternalTuple(target2)); dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target2)); dispenser.SendNextLine("sixth line to #2".ToExternalTuple(target2)); dispenser.SendNextLine(null); //end-of-data - this null is not forwarded to any target //assert var writtenLines = WrittenLines(target1).ToList(); //first target writtenLines.Count().Should().Be(4); writtenLines[0].Should().Be("first line to #1"); writtenLines[1].Should().Be(string.Empty); writtenLines[2].Should().Be("third line to #1"); writtenLines[3].Should().Be(string.Empty); writtenLines = WrittenLines(target2).ToList(); //second target writtenLines.Count().Should().Be(6); writtenLines[0].Should().Be(string.Empty); writtenLines[1].Should().Be("second line to #2"); writtenLines[2].Should().Be("third line to #2"); writtenLines[3].Should().Be("fourth line to #2"); writtenLines[4].Should().Be(string.Empty); writtenLines[5].Should().Be("sixth line to #2"); writtenLines = WrittenLines(target3).ToList(); //third target writtenLines.Count().Should().Be(1); writtenLines[0].Should().Be("first line to #3"); }
public void SendNextLine_2LinesPlusNullsToSingleTarget_CorrectDataWritten() { //arrange int target1 = 1; var dispenser = LineDispenserCreator.CreateLineDispenser(Enumerable.Repeat(_writers[0], 1), KindOfTextData.Raw, false, null, null); //only the first of the 3 writers is used in this test //act dispenser.SendNextLine("first line".ToExternalTuple(target1)); dispenser.SendNextLine("second line".ToExternalTuple(target1)); dispenser.SendNextLine(string.Empty.ToExternalTuple(target1)); dispenser.SendNextLine(Tuple.Create <ExternalLine, int>(null, target1)); //null string sent is indistinguishable from empty string dispenser.SendNextLine(null); //end-of-data - this null is not forwarded to any target //assert var writtenLines = WrittenLines(target1).ToList(); writtenLines.Count().Should().Be(4); writtenLines[0].Should().Be("first line"); writtenLines[1].Should().Be("second line"); writtenLines[2].Should().Be(string.Empty); writtenLines[3].Should().Be(string.Empty); }