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); }
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>()); }
/// <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)); }
/// <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)); }
/// <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)); }