Akka.Streams.Tests.IO.FileSourceSpec.FileSource_should_complete_only_when_all_contents_of_a_file_have_been_signalled C# (CSharp) Method

FileSource_should_complete_only_when_all_contents_of_a_file_have_been_signalled() private method

        public void FileSource_should_complete_only_when_all_contents_of_a_file_have_been_signalled()
        {
            this.AssertAllStagesStopped(() =>
            {
                var chunkSize = 512;
                var bufferAttributes = Attributes.CreateInputBuffer(1, 2);
                var demandAllButOnechunks = _testText.Length / chunkSize - 1;

                var p = FileIO.FromFile(TestFile(), chunkSize)
                    .WithAttributes(bufferAttributes)
                    .RunWith(Sink.AsPublisher<ByteString>(false), _materializer);

                var c = this.CreateManualProbe<ByteString>();
                p.Subscribe(c);
                var sub = c.ExpectSubscription();

                var remaining = _testText;
                var nextChunk = new Func<string>(() =>
                {
                    string chunks;

                    if (remaining.Length <= chunkSize)
                    {
                        chunks = remaining;
                        remaining = string.Empty;
                    }
                    else
                    {
                        chunks = remaining.Substring(0, chunkSize);
                        remaining = remaining.Substring(chunkSize);
                    }

                    return chunks;
                });

                sub.Request(demandAllButOnechunks);
                for (var i = 0; i < demandAllButOnechunks; i++)
                    c.ExpectNext().DecodeString(Encoding.UTF8).Should().Be(nextChunk());
                c.ExpectNoMsg(TimeSpan.FromMilliseconds(300));

                sub.Request(1);
                c.ExpectNext().DecodeString(Encoding.UTF8).Should().Be(nextChunk());
                c.ExpectNoMsg(TimeSpan.FromMilliseconds(200));

                sub.Request(1);
                c.ExpectNext().DecodeString(Encoding.UTF8).Should().Be(nextChunk());
                c.ExpectComplete();
            }, _materializer);
        }