public void DuplicateKey_ThrowsInvalidBencodeExceptionAsync(IBencodeParser bparser, BString someKey, BString someValue)
        {
            bparser.ParseAsync <BString>(Arg.Any <PipeBencodeReader>()).Returns(someKey, someKey);
            bparser.ParseAsync(Arg.Any <PipeBencodeReader>()).Returns(someValue);

            var parser = new BDictionaryParser(bparser);

            Func <Task> action = async() => await parser.ParseStringAsync("di42ee");

            action.Should().Throw <InvalidBencodeException <BDictionary> >().WithMessage("*The dictionary already contains the key*");
        }
        public void InvalidValue_ThrowsInvalidBencodeExceptionAsync(IBencodeParser bparser, BString someKey)
        {
            bparser.ParseAsync <BString>(Arg.Any <PipeBencodeReader>()).Returns(someKey);
            bparser.ParseAsync(Arg.Any <PipeBencodeReader>()).Throws <BencodeException>();

            var parser = new BDictionaryParser(bparser);

            Func <Task> action = async() => await parser.ParseStringAsync("di42ee");

            action.Should().Throw <InvalidBencodeException <BDictionary> >().WithMessage("*Could not parse dictionary value*");
        }
        public void MissingEndChar_ThrowsInvalidBencodeExceptionAsync(string bencode, IBencodeParser bparser, BString someKey, IBObject someValue)
        {
            // Arrange
            bparser.ParseAsync <BString>(Arg.Any <PipeBencodeReader>())
            .Returns(someKey);

            bparser.ParseAsync(Arg.Any <PipeBencodeReader>())
            .Returns(someValue)
            .AndSkipsAheadAsync(bencode.Length - 1);

            // Act
            var         parser = new BDictionaryParser(bparser);
            Func <Task> action = async() => await parser.ParseStringAsync(bencode);

            // Assert
            action.Should().Throw <InvalidBencodeException <BDictionary> >().WithMessage("*Missing end character of object*");
        }
        public async Task CanParseSimpleAsync(string bencode, IBencodeParser bparser)
        {
            // Arrange
            var key   = new BString("key");
            var value = new BString("value");

            bparser.ParseAsync <BString>(Arg.Any <PipeBencodeReader>())
            .Returns(key);

            bparser.ParseAsync(Arg.Any <PipeBencodeReader>())
            .Returns(value)
            .AndSkipsAheadAsync(bencode.Length - 2);

            // Act
            var parser      = new BDictionaryParser(bparser);
            var bdictionary = await parser.ParseStringAsync(bencode);

            // Assert
            bdictionary.Count.Should().Be(1);
            bdictionary.Should().ContainKey(key);
            bdictionary[key].Should().BeSameAs(value);
        }
Ejemplo n.º 5
0
        public async Task CanParseSimpleAsync(string bencode, IBencodeParser bparser)
        {
            // Arrange
            var bstring = new BString("test");

            bparser.ParseAsync(Arg.Any <PipeBencodeReader>())
            .Returns(bstring)
            .AndSkipsAheadAsync(bencode.Length - 2);

            // Act
            var parser = new BListParser(bparser);
            var blist  = await parser.ParseStringAsync(bencode);

            // Assert
            blist.Count.Should().Be(1);
            blist[0].Should().BeOfType <BString>();
            blist[0].Should().BeSameAs(bstring);
            await bparser.Received(1).ParseAsync(Arg.Any <PipeBencodeReader>());
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Parses an <see cref="IBObject"/>  of type <typeparamref name="T"/> from the <see cref="Stream"/> asynchronously using a <see cref="PipeReader"/>.
        /// </summary>
        /// <typeparam name="T">The type of <see cref="IBObject"/> to parse as.</typeparam>
        public static ValueTask <T> ParseAsync <T>(this IBencodeParser parser, Stream stream, StreamPipeReaderOptions readerOptions = null, CancellationToken cancellationToken = default) where T : class, IBObject
        {
            var reader = PipeReader.Create(stream, readerOptions);

            return(parser.ParseAsync <T>(reader, cancellationToken));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Parses an <see cref="IBObject"/> of type <typeparamref name="T"/> from the <see cref="PipeReader"/>.
        /// </summary>
        /// <typeparam name="T">The type of <see cref="IBObject"/> to parse as.</typeparam>
        public static ValueTask <T> ParseAsync <T>(this IBencodeParser parser, PipeReader pipeReader, CancellationToken cancellationToken = default) where T : class, IBObject
        {
            var reader = new PipeBencodeReader(pipeReader);

            return(parser.ParseAsync <T>(reader, cancellationToken));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Parses an <see cref="IBObject"/> from the <see cref="PipeReader"/>.
        /// </summary>
        public static ValueTask <IBObject> ParseAsync(this IBencodeParser parser, PipeReader pipeReader, CancellationToken cancellationToken = default)
        {
            var reader = new PipeBencodeReader(pipeReader);

            return(parser.ParseAsync(reader, cancellationToken));
        }