コード例 #1
0
        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);
        }
コード例 #2
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);
        }
コード例 #3
0
        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);
        }
コード例 #4
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~");
        }
コード例 #5
0
        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");
        }
コード例 #6
0
        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");
        }
コード例 #7
0
        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);
        }